享元模式

作者: hangzhi | 来源:发表于2020-06-03 12:33 被阅读0次
    • 定义:
      运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。
    • 特点:
      • 相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。(优点)
      • 为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。(缺点)
      • 读取享元模式的外部状态会使得运行时间稍微变长。(缺点)
    • 通常适用场景:
      • 系统中存在大量相同或相似的对象,这些对象耗费大量的内存资源。
      • 大部分的对象可以按照内部状态进行分组,且可将不同部分外部化,这样每一个组只需保存一个内部状态。
    • demo代码:
      • 享元
      //抽象享元类
        public interface Car {
            void make(int count);
        }
      
        //具体享元类
        public class FruitCar implements Car {
      
            private String carType;
      
            public FruitCar(String carType){
                this.carType=carType;
                System.out.println(carType + "车被创建");
            }
      
            @Override
            public void make(int count) {
                System.out.println(carType + "车被使用"+count+"次");
            }
        }
      
        //享元工厂类
        public class FruitCarFactory{
      
            private Map<String,Car> fruitCarMap= new ConcurrentHashMap<>();
      
            public Car createFruitCar(String carType){
                Car car = fruitCarMap.get(carType);
                if(car ==null){
                    car=new FruitCar(carType);
                    fruitCarMap.put(carType,car);
                }else {
                    System.out.println("已存在"+ carType+"车,成功获取");
                }
                return car;
            }
        }
      
      
      • 测试和结果
        public static  void main(String[] args) {
            FruitCarFactory fruitCarFactory =new FruitCarFactory();
            Car a1 = fruitCarFactory.createFruitCar("A类");
            a1.make(1);
            Car a2 = fruitCarFactory.createFruitCar("A类");
            a2.make(2);
            Car a3 = fruitCarFactory.createFruitCar("A类");
            a3.make(3);
            Car b1 = fruitCarFactory.createFruitCar("B类");
            b1.make(1);
            Car b2 = fruitCarFactory.createFruitCar("B类");
            b2.make(2);
        }
      
    运行结果

    相关文章

      网友评论

        本文标题:享元模式

        本文链接:https://www.haomeiwen.com/subject/uhclahtx.html