zoukankan      html  css  js  c++  java
  • 大话设计模式笔记 享元模式

    享元模式(Flyweigh),运用共享技术有效地支持大量细粒度的对象。
    package flyweight;
    
    //可以接受并作用于外部状态
    public abstract class Flyweight {
        public abstract  void operation(int extrinsicState);
    
    }
    package flyweight;
    
    //为内部状态增加存储空间
    public class ConcreteFlyweight extends Flyweight{
    
        @Override
        public void operation(int extrinsicState) {
            System.out.println("ConcreteFlyweight"+extrinsicState);
        }
    
    }
    package flyweight;
    
    //不需要共享的子类
    public class UnsharedConcreteFlyweight extends Flyweight {
    
        @Override
        public void operation(int extrinsicState) {
            System.out.println("UnsharedConcreteFlyweight"+extrinsicState);
        }
    
    }
    package flyweight;
    
    import java.util.HashMap;
    
    public class FlyweightFactory {
        private HashMap<String, Flyweight> flyweightMap=new HashMap<String, Flyweight>();
    
        public FlyweightFactory() {
            flyweightMap.put("X", new ConcreteFlyweight());
            flyweightMap.put("Y", new ConcreteFlyweight());
            flyweightMap.put("Z", new ConcreteFlyweight());
        }
    
        public Flyweight getFlyweightMap(String key) {
            return flyweightMap.get(key);
        }
        
        public static void main(String[] args) {
            int extrinsicState=22;
            
            FlyweightFactory flyweightFactory=new FlyweightFactory();
            
            Flyweight flyweight=flyweightFactory.getFlyweightMap("X");
            flyweight.operation(--extrinsicState);
            
            Flyweight flyweight2=flyweightFactory.getFlyweightMap("Y");
            flyweight.operation(--extrinsicState);
            
            Flyweight flyweight3=flyweightFactory.getFlyweightMap("Z");
            flyweight.operation(--extrinsicState);
            
            UnsharedConcreteFlyweight unsharedConcreteFlyweight=new UnsharedConcreteFlyweight();
            unsharedConcreteFlyweight.operation(--extrinsicState);
            
        }
        
    }

    享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的,有时就能够大幅度地减少需要实例化的类的数量,如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度地减少单个实例的数目。

  • 相关阅读:
    sql where 与 having的区别
    Linux下shell脚本监控Tomcat的状态并实现自动启动
    CentOS MySQL自动备份shell脚本
    HTTP请求时connectionRequestTimeout 、connectionTimeout、socketTimeout三个超时时间的含义
    Linux下搭建禅道项目管理软件
    JMeter压力测试及并发量计算-2
    JMeter压力测试及并发量计算-1
    Eclipse常用快捷键大全
    常用的adb命令
    js-消息对话框
  • 原文地址:https://www.cnblogs.com/linkarl/p/4868193.html
Copyright © 2011-2022 走看看