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

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

  • 相关阅读:
    从安装.net Core 到helloWord(Mac上)
    阿里云-对象储存OSS
    图片处理
    项目中 添加 swift代码 真机调试 错误
    iOS面试总结
    IOS APP配置.plist汇总
    cocoapods安装问题
    iOS8使用UIVisualEffectView实现模糊效果
    ios键盘回收终极版
    ?C++ 缺少参数的默认参数
  • 原文地址:https://www.cnblogs.com/linkarl/p/4868193.html
Copyright © 2011-2022 走看看