JAVA设计模式之享元模式
2017-09-08 10:52
393 查看
场景:内存属于稀缺资源,不要随便浪费,如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存
核心:享元模式以共享的方式高效地支持大量细粒度对象的重用
享元模式对象能做到共享的关键是区分了内部状态和外部状态。
内部状态:可以共享,不会碎环境变化而变化
外部状态:不可以共享,会随环境变化而改变
核心:享元模式以共享的方式高效地支持大量细粒度对象的重用
享元模式对象能做到共享的关键是区分了内部状态和外部状态。
内部状态:可以共享,不会碎环境变化而变化
外部状态:不可以共享,会随环境变化而改变
package com.imust.flyweight; /** * 享元类 * @author Zachary (为上帝所心仪的人) * @date 2017年9月7日 * @project shejimoshi * @package com.imust.flyweight */ public interface ChessFlyWeight { void setColor(String s); String getColor(); void display(Coordinate c); } /** * 具体的享元类 为内部状态提供成员变量进行存储 * @author Zachary (为上帝所心仪的人) * @date 2017年9月7日 * @project shejimoshi * @package com.imust.flyweight */ class ConcreateChess implements ChessFlyWeight{ private String color; public ConcreateChess(String color) { super(); this.color = color; } @Override public void setColor(String c) { this.color = c; } @Override public String getColor() { return color; } @Override public void display(Coordinate c) { System.out.println("棋子颜色"+color); System.out.println("棋子位置"+c.getX()+c.getY()); } }
package com.imust.flyweight; /** * 外部状态 UnSharedConcreateFlyWeight * @author Zachary (为上帝所心仪的人) * @date 2017年9月7日 * @project shejimoshi * @package com.imust.flyweight */ public class Coordinate { private int x; private int 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; } }
package com.imust.flyweight; /** * 外部状态 UnSharedConcreateFlyWeight * @author Zachary (为上帝所心仪的人) * @date 2017年9月7日 * @project shejimoshi * @package com.imust.flyweight */ public class Coordinate { private int x; private int 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; } }
package com.imust.flyweight; public class Client { public static void main(String[] args) { ChessFlyWeight chess1 = new ChessFlyWeightFactory().getChess("黑色"); ChessFlyWeight chess2 = new ChessFlyWeightFactory().getChess("黑色"); System.out.println(chess1); System.out.println(chess2); System.out.println("增加外部状态的处理"); chess1.display(new Coordinate(10, 10)); chess2.display(new Coordinate(20, 20)); } }
相关文章推荐
- Java设计模式之--享元模式(Flyweight Pattern)
- Java设计模式——享元模式(Flyweight)
- Java开发中的23种设计模式之十二:享元模式(Flyweight)
- Java设计模式-享元模式
- JAVA 设计模式 享元模式
- JAVA设计模式之享元模式
- 11.java设计模式(读书笔记)享元模式
- Java设计模式笔记之享元模式
- JAVA系列-设计模式-享元模式
- 走穿23java种设计模式--12享元模式详解
- 【GOF23设计模式】_享元模式_享元池_内部状态_外部状态_线程池_连接池JAVA242
- Java设计模式(六)合成模式 享元模式
- java设计模式13_享元模式
- Java设计模式之——享元模式
- Java设计模式(12)之享元模式
- Java设计模式之《享元模式》及应用场景
- java设计模式——享元模式(Flyweight Pattern)
- Java设计模式之享元模式
- java设计模式(十一)--享元模式
- java设计模式_享元模式