Java设计模式之享元模式
来源:互联网 发布:javascript 输入 赋值 编辑:程序博客网 时间:2024/06/05 19:54
享元模式(Flyweight):运用共享技术有效地支持大量细粒度对象。
所有具体享元类的超类,接受并作用于外部状态:
public abstract class FlyWeight {//所有具体享元类的超类,接受并作用于外部状态 public abstract void operation(int extrinsicState);}class ConcreteFlyWeight extends FlyWeight { @Override public void operation(int extrinsicState) { System.out.println("具体FlyWeight:" + extrinsicState); }}class UnsharedConcreteFlyWeight extends FlyWeight { @Override public void operation(int extrinsicState) { System.out.println("不共享的具体FlyWeight:" + extrinsicState); }}享元工厂:
public class FlyWeightFactory {//享元工厂 private HashMap<String, FlyWeight> flyWeights = new HashMap<String, FlyWeight>(); public FlyWeight getFlyWeight(String key) { if (!flyWeights.containsKey(key)) { flyWeights.put(key, new ConcreteFlyWeight()); } return flyWeights.get(key); }}客户端:
public class FlyWeightClient {//客户端 public static void main(String[] args) { int extrinsicState = 22; FlyWeightFactory f = new FlyWeightFactory(); FlyWeight fx = f.getFlyWeight("X"); fx.operation(--extrinsicState); FlyWeight fy = f.getFlyWeight("Y"); fy.operation(--extrinsicState); FlyWeight fz = f.getFlyWeight("Z"); fz.operation(--extrinsicState); FlyWeight uf = new UnsharedConcreteFlyWeight(); uf.operation(--extrinsicState); }}运行结果:
具体FlyWeight:21具体FlyWeight:20具体FlyWeight:19不共享的具体FlyWeight:18享元模式的应用场景:
如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用;还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象时,可以考虑使用享元模式。
阅读全文
1 0
- java设计模式之享元模式
- JAVA设计模式之享元模式
- java设计模式之享元模式
- JAVA设计模式之享元模式
- Java设计模式之享元模式
- JAVA设计模式之享元模式
- JAVA设计模式之享元模式
- 《Java设计模式》之享元模式
- JAVA设计模式之享元模式
- JAVA设计模式之享元模式
- java设计模式之享元模式
- JAVA设计模式之享元模式
- java设计模式之享元模式
- java设计模式之享元模式
- Java设计模式之享元模式
- java设计模式之享元模式
- JAVA设计模式之享元模式
- Java设计模式之-享元模式
- nodejs块级作用域
- mysql 连接失败:SQLSTATE[HY000] [2003] Can't connect to 公网服务器
- UsacoTraining Chapter1.3 Milking Cows
- 【C++】使用new新建动态二维数组
- angular简单随机选择
- Java设计模式之享元模式
- Android Activity探究活动
- PageRank算法 到 textRank
- 【考研】第十四周总结
- 在notebook中使用pyspark遇到的问题
- 有趣的理解面向对象之封装!
- 史上最简单的 MySQL 教程(四十)「数据库变量」
- 使用Tomcat实现Java连接池(解决main中不能够调用问题)
- TCP三次握手&四次分手抓包分析