zoukankan      html  css  js  c++  java
  • 设计模式之Flyweight模式(笔记)

    享元模式:运用共享技术有效地支持大量细粒度的对象。
    适用场合:假设一个应用程序适用了大量的对象。而大量的这些对象造成了非常大的存储开销时就应该考虑使用。
    这里写图片描写叙述

    首先定义一个IFlyweight接口

    public interface IFlyweight {
    
        public void operation(int extrinsicstate);
    }

    接着定义一个ConcreteFlyweight继承IFlyweight

    public class ConcreteFlyweight implements IFlyweight{
    
        @Override
        public void operation(int extrinsicstate) {
    
            System.out.println("详细flyweight:"+extrinsicstate);
    
        }
    
    }

    再定义一个UnsharedConcreteFlyweight继承IFlyweight

    public class UnsharedConcreteFlyweight implements IFlyweight{
    
        @Override
        public void operation(int extrinsicstate) {
    
            System.out.println("不共享的详细flyweight:"+extrinsicstate);
    
        }
    }

    然后定义一个FlyweightFactory

    public class FlyweightFactory {
    
        Map<String, IFlyweight> flyweights=new HashMap<String,IFlyweight>();
    
        public FlyweightFactory(){
            flyweights.put("x", new ConcreteFlyweight());
            flyweights.put("y", new ConcreteFlyweight());
            flyweights.put("z", new ConcreteFlyweight());
        }
    
        public IFlyweight getFlyweight(String key){
            return flyweights.get(key);
        }
    }

    client代码

    public static void main(String[] args) {
            //享元模式
            int extrinsicstate=22;
            FlyweightFactory factory=new FlyweightFactory();
    
            IFlyweight fx=factory.getFlyweight("x");
            fx.operation(--extrinsicstate);
    
            IFlyweight fy=factory.getFlyweight("y");
            fy.operation(--extrinsicstate);
    
            IFlyweight fz=factory.getFlyweight("z");
            fz.operation(--extrinsicstate);
    
            IFlyweight uf=new UnsharedConcreteFlyweight();
            uf.operation(--extrinsicstate);
        }
  • 相关阅读:
    2018.9.22 Bubble Cup 11-Finals(Online Mirror,Div.2)
    2018.9.21 Codeforces Round #511(Div.2)
    2018.9.20 Educational Codeforces Round 51
    解题:USACO12OPEN Bookshelf
    解题:CF983B pyramid
    1214. 许可证密钥格式
    1212. 最大连续1的个数
    1270. 勒索信
    1250. 第三大的数
    1218. 补数
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6992663.html
Copyright © 2011-2022 走看看