首页 > 代码库 > java设计模式--享元模式
java设计模式--享元模式
享元模式(flyweight)
当需要有很多完全相同或相似的对象需要创建的时候,主要是相似的时候,我们可以用享元模式。尽可能少创建对象,节省内存。
享元模式主要有4中角色
1.享元的工厂
2.抽象享元对象
2.内部状态对象:可以共享的
3.外部状态对象:不可以共享的
下面以围棋的棋子为例:每个棋子都是一个对象,但是每个棋子的大部分都一样,只有颜色,摆放位置不一样,这样就没必要每个棋子都创建一个对象,把相同的和不同的分离开来。
//享元类抽象public interface FlyWeight { void setColor(String color); String getColor(); void diplay(Waibu c); }//内部,可以共享的分离出来,引用外部不可以共享的class Neibu implements FlyWeight{ private String color; public Neibu(String color) { this.color = color; } public void setColor(String color) { this.color = color; } public String getColor() { return color; } public void diplay(Waibu c) { System.out.println("棋子颜色"+color); System.out.println("棋子为止"+c.getX()+":"+c.getY()); } }//外部,不可以共享的分离出来class Waibu{ private String x; private String y; public Waibu(String x, String y) { this.x = x; this.y = y; } public String getX() { return x; } public void setX(String x) { this.x = x; } public String getY() { return y; } public void setY(String y) { this.y = y; }
//享元工厂public class FlyWeightFactory { private static Map<String, FlyWeight> map = new HashMap<String, FlyWeight>(); public static FlyWeight get(String color){ if(map.get(color)!=null){ return map.get(color); }else{ FlyWeight flyWeight = new Neibu(color); map.put(color, flyWeight); return flyWeight; } } }
public static void main(String[] args) { FlyWeight f1 = FlyWeightFactory.get("白色"); FlyWeight f2 = FlyWeightFactory.get("白色"); f1.diplay(new Waibu("25", "25")); f2.diplay(new Waibu("50", "50")); }
白色和白色其实是一个对象不用创建两个,位置可由外部状态定义
java设计模式--享元模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。