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);
            
        }
        
    }

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

  • 相关阅读:
    洛谷-P2430 严酷的训练
    Hackthebox网络不稳定的解决方案
    解压
    谷歌地图API密钥未授权利用
    关于读取heapdump踩的一个小坑
    RECON
    最近思考
    go get
    Js跳转
    Session
  • 原文地址:https://www.cnblogs.com/linkarl/p/4868193.html
Copyright © 2011-2022 走看看