zoukankan      html  css  js  c++  java
  • 设计模式之享元模式

    享元模式:

    • 运用共享技术有效地支持大量细粒度的对象。

    示例代码:

    • Flyweight类,它是所有具体享元类的超类或接口,通过这个接口,Flyweight可以接受并作用于外部状态。
    abstract class Flyweight {
        public abstract void Operation(int extrinsicstate);
    }
    
    • ConcreteFlyweight是继承Flyweight超类或实现Flyweight接口,并为内部状态增加存储空间。
    class ConcreteFlyweight : Flyweight {
        public override void Operation(int extrinsicstate) {
            Console.WriteLine("具体Flyweight:" + extrinsicstate);
        }
    }
    
    • UnsharedConcreteFlyweight是指那些不需要共享的Flyweight子类。因为Flyweight接口共享成为可能,但它并不强制共享。
    class UnsharedConcreteFlyweight : Flyweight {
        public override void Operation(int extrinsicstate) {
            Console.WriteLine("不共享的具体Flyweight:" + extrinsicstate);
        }
    }
    
    • FlyweightFactory,是一个享元工厂,用来创建并管理Flyweight对象。它主要是用来确保合理地共享Flyweight,当用户请求一个Flyweight时,FlyweightFactory对象提供一个已创建的实例或者创建一个( 如果不存在的话)。
    class FlyweightFactory {
        private Hashtable flyweights = new Hashtable();
        
        //初始化工厂时,先生成三个实例
        public FlyweightFactory() {
            flyweights.Add("X", new ConcreteFlyweight());
            flyweights.Add("Y", new ConcreteFlyweight());
            flyweights.Add("Z", new ConcreteFlyweight());
        }
        
        //根据客户端请求,获得已生成的实例
        public Flyweight GetFlyweight(String key) {
            return ((Flyweight) flyweights[key]);
        }
    }
    
    • 客户端代码
    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");
        fy.Operation(--extrinsicstate);
        
        Flyweight uf = new UnsharedConcreteFlyweight();
        
        uf.Operation(--extrinsicstate);
        
        Console.Read();
    }
    

    结果表示

    具体Flyweight:21
    具体Flyweight:20
    具体Flyweight:19
    不共享的具体Flyweight:18
    
  • 相关阅读:
    lock,Monitor,Mutex的区别
    byte[]数组和int之间的转换
    接口测试总结
    python接口自动化测试(七)unittest 生成测试报告
    python 接口自动化测试(六)使用unittest 批量用例管理
    python 接口自动化测试(五)其他-认证&代理&超时配置
    python 接口自动化测试(四)cookie&session
    接口自动化测试 (三)request.post
    python 接口自动化测试二(request.get)
    python接口自动化测试(c测试环境的准备)
  • 原文地址:https://www.cnblogs.com/sanjun/p/8370919.html
Copyright © 2011-2022 走看看