享元模式——结构型

61 阅读1分钟

1.白话文定义

享元工厂控制,使用HashMap实现缓冲池重用现有的同类对象,如果没有匹配到对象,则创建新对象。

2.角色

1.享元接口类:抽象的享元角色,定义出对象的内部和外部状态;

2.具体享元实现类:具体的享元角色,实现具体的业务;

3.享元工厂类:用于构建一个池对象,同时享元工厂类会提供公共方法获取享元类;

4.客户端调用类。

3.类图

image.png

4.代码实现

1.享元接口类

public interface Flyweight {
    
    void operation();
}

2.具体享元实现类

public class ConcreteFlyweight implements Flyweight {
    private String type;

    public ConcreteFlyweight(String type) {
        this.type = type;
    }

    @Override
    public void operation() {
        System.out.println(type + " 享元具体实现类 执行方法");
    }
}

3.享元工厂类

public class FlyweightFactory {

    static Map<String, Flyweight> POOLS = new HashMap<>();
    public Flyweight getFlyweight(String type) {
        if (!POOLS.containsKey(type)) {
            POOLS.put(type, new ConcreteFlyweight(type));
        }
        return POOLS.get(type);
    }
}

4.客户端调用类

public class Main {
    public static void main(String[] args) {

        FlyweightFactory flyweightFactory = new FlyweightFactory();
        Flyweight wx = flyweightFactory.getFlyweight("wx");
        wx.operation();
    }
}

5.优点

大大减少对象的创建,降低系统的内存,使效率提高。

6.缺点

为了使对象可以共享,享元模式需要将享元对象的状态外部化,而读取外部状态使的运行时间变长。

7.使用场景

1.系统需要创建大量对象;

2.对象的状态大部分可以进行外部化。

8.参考

享元模式