java设计模式---享元模式
来源:互联网 发布:网达软件 编辑:程序博客网 时间:2024/05/02 02:14
内存属于稀缺资源,不要随便浪费,如果有很多个相同或者相似的对象,我们就可以通过享元模式来节省内存。
享元对象能做到共享的关键是区分了内部状态和外部状态。
内部状态:可以共享,不会随外部状态的改变而改变。
外部状态:不可以共享,会随外部状态的改变而改变。
以围棋的棋子为例子,其大小形状相同,颜色分为黑白,只有位置信息不同。
看代码:
interface ChessFlyWeight { void setColor(String c); String getColor(); void display(Coordinate c);}class ConcreteChess implements ChessFlyWeight { private String color; public ConcreteChess(String color) { super(); this.color = color; } @Override public void setColor(String c) { // TODO Auto-generated method stub this.color = c; } @Override public String getColor() { // TODO Auto-generated method stub return this.color; } @Override public void display(Coordinate c) { // TODO Auto-generated method stub System.out.println("棋子颜色:" + color); System.out.println("棋子位置:" + c.getX() + "----" + c.getY()); }}
class Coordinate { int x, y; public Coordinate(int x, int y) { super(); this.x = x; this.y = y; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; }}
享元工厂类:
class ChessFlyWeightFactory{ static Map<String,ChessFlyWeight> map=new HashMap<String, ChessFlyWeight>(); public static ChessFlyWeight getChess(String c){ if(map.get(c)!=null){ return map.get(c); }else{ ChessFlyWeight ct=new ConcreteChess(c); map.put(c,ct); return ct; } }}
最后看测试类
public class TestFlyWeight { public static void main(String[] args) { ChessFlyWeight c1=ChessFlyWeightFactory.getChess("白色"); c1.display(new Coordinate(10, 10)); System.out.println(c1); ChessFlyWeight c2=ChessFlyWeightFactory.getChess("白色"); c2.display(new Coordinate(20, 20)); System.out.println(c2); }}
测试结果:
但是,享元模式为了节省内存,共享了内部状态,分离了外部状态,而读取外部状态增加了运行时间,即用时间换取了空间。
应用场景:
1:享元模式由于其共享的特性,可以在任何“池”中操作,比如线程池,数据库连接池。
2:String类的设计也是运用了享元模式。
0 0
- JAVA-享元设计模式
- java享元设计模式
- Java设计模式-----FlyWeight享元模式
- Java 享元模式(Flyweight) 设计模式
- Java设计模式-----FlyWeight享元模式
- java设计模式之享元模式
- JAVA设计模式之享元模式
- java设计模式之享元模式
- java设计模式---享元模式
- java设计模式---享元模式
- JAVA系列-设计模式-享元模式
- java设计模式-享元模式
- JAVA设计模式之享元模式
- Java设计模式之享元模式
- JAVA设计模式之享元模式
- Java设计模式 享元模式
- JAVA设计模式之享元模式
- java设计模式(8) - 享元模式
- C语言中求字符串长度
- 《剑指offer》——反转链表
- 《NoSQL精粹》各章要点
- HDU2803 The MAX 【水题】
- hdu 5524 规律题
- java设计模式---享元模式
- 直方图规定化
- c++常见面试题
- HDOJ-1495-非常可乐【广搜】
- 常用数据压缩库的编译与使用
- AltiumDesigner03——将别人库中的元件加入自己的库中
- 《剑指offer》——旋转数组的最小数字
- 素数问题
- Quartz CronTrigger最完整配置说明