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

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

  • 相关阅读:
    挂载磁盘不成功显示mount: /mnt: wrong fs type, bad option, bad superblock..............
    Linux如何查看文件的创建、修改时间?
    Linux,Centos下 Tomcat8 修改jvm内存配置的新方法
    ActiveMQ问题分析和解决
    centos如何删除文件夹
    CentOS 几种重启方式的区别
    CentOS查看文件夹大小
    挂在光盘出现写保护mount: block device /dev/sr0 is writeprotected, mounting readonly
    centos7安装activeMq
    Rust中的workspace
  • 原文地址:https://www.cnblogs.com/linkarl/p/4868193.html
Copyright © 2011-2022 走看看