享元模式

2018-12-16  本文已影响11人  Stroman

它有啥用?

它的目的是有可用对象就复用这个对象否则就直接创建一个新的对象。很显然这样做可以节省存储空间

主要思想

就是用哈希表来存储和检索对象。

类图

类图.png

调用

package com.company;

import java.util.Random;

public class Main {

    public static void main(String[] args) {
    // write your code here
        ObjectsFactory factory = new ObjectsFactory();
        Random random = new Random();
        factory.getObject(random.nextInt(4));
        factory.getObject(random.nextInt(4));
        factory.getObject(random.nextInt(4));
        factory.getObject(random.nextInt(4));
        factory.getObject(random.nextInt(4));
        factory.getObject(random.nextInt(4));
        factory.getObject(random.nextInt(4));
        factory.getObject(random.nextInt(4));
        factory.getObject(random.nextInt(4));
    }
}

结果

创建对象0
创建对象2
获取对象0
创建对象1
创建对象3
获取对象3
获取对象3
获取对象2
获取对象0

Process finished with exit code 0

对象工厂

package com.company;

import java.util.HashMap;

public class ObjectsFactory {
    private HashMap<Integer,Targets> cache = new HashMap();

    public Targets getObject(Integer id) {
        if (this.cache.containsKey(id)) {
            System.out.println("获取对象" + id);
            return this.cache.get(id);
        } else {
            Targets newObject = new ConcreteTarget();
            System.out.println("创建对象" + id);
            this.cache.put(id,newObject);
            return newObject;
        }
    }
}

抽象对象类型

package com.company;

public interface Targets {
}

具体对象类型

package com.company;

public class ConcreteTarget implements Targets {
}

多谢捧场

如果您觉得我的文章有价值,那么赏脸打赏一个,鄙人感激不尽。不过,不打赏看看也是好的,如果有不对的地方,还请您多多指正。


上一篇 下一篇

猜你喜欢

热点阅读