JAVA设计模式之享元模式
来源:互联网 发布:js修改button的文字 编辑:程序博客网 时间:2024/06/02 05:10
场景:内存属于稀缺资源,不要随便浪费,如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存
核心:享元模式以共享的方式高效地支持大量细粒度对象的重用
- 享元模式对象能做到共享的关键是区分了内部状态和外部状态。
内部状态:可以共享,不会碎环境变化而变化
外部状态:不可以共享,会随环境变化而改变
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)); }}
阅读全文
0 0
- java设计模式之享元模式
- JAVA设计模式之享元模式
- java设计模式之享元模式
- JAVA设计模式之享元模式
- Java设计模式之享元模式
- JAVA设计模式之享元模式
- JAVA设计模式之享元模式
- 《Java设计模式》之享元模式
- JAVA设计模式之享元模式
- JAVA设计模式之享元模式
- java设计模式之享元模式
- JAVA设计模式之享元模式
- java设计模式之享元模式
- java设计模式之享元模式
- Java设计模式之享元模式
- java设计模式之享元模式
- JAVA设计模式之享元模式
- Java设计模式之-享元模式
- 按钮上传文件js
- 机器码和字节码
- 项目组成员开发注意事项
- unity3d 贪吃蛇移动
- Maven 使用Nexus搭建Maven私服
- JAVA设计模式之享元模式
- HDU1013 水题字符串 九余数定理
- bitblt与StretchDIBits
- 一个轻量级的java web开发框架,0配置
- 自媒体淘客的优势
- 搜索方法中的剪枝优化
- 日常笔记
- iOS中OpenGL是如何将帧缓冲(frameBuffer)渲染到屏幕上的? OpenGL iOS端渲染流程
- C语言预处理命令总结大全