Java23种设计模式-结构型模式之享元模式

享元模式(Flyweight Pattern):主要用于减少创建大量相似对象时的内存占用通过共享对象,享元模式可以减少内存中对象的数量,从而提高程序性能。

角色

1.享元角色(Flyweight):享元对象包含了可以共享的内在状态。

2.享元工厂(Flyweight Factory):管理享元对象池,确保合理地共享享元对象。

3.客户端(Client):客户端使用享元工厂来获取享元对象,并与外部状态一起使用。

优点:

1.节省内存:通过共享已存在的对象,减少对象的创建数量,节省内存资源。

2.提高性能:减少了创建和销毁对象的开销,提高系统性能。

3.降低内存占用:避免了大量相似对象的存储。

4.更好的资源利用:有效地利用有限的资源。

缺点:

1.复杂性增加:需要额外的代码来管理享元对象,增加了系统的复杂性。

2.状态管理复杂:对象的状态可能会变得复杂,需要仔细处理。

3.线程安全性:在多线程环境下,需要考虑线程安全问题。

4.代码可读性降低:复杂的享元模式实现可能会降低代码的可读性。

5.维护困难:代码的复杂性增加可能导致维护困难。

6.限制灵活性:可能对系统的灵活性产生一定的限制。

7.依赖享元工厂:系统过于依赖享元工厂,可能导致耦合性增加。

8.性能权衡:在某些情况下,可能会因为享元的共享而导致一定的性能损失。

9.代码复杂度上升:实现享元模式可能会增加代码的复杂度和开发成本。

10.不易测试:复杂的结构可能使测试变得困难。

应用场景:

1.系统中存在大量相似的对象。

2.对象的创建和销毁开销较大。

3.内存资源有限,需要节省内存。

示例:ConcreteFlyweight 是享元角色,FlyweightFactory 是享元工厂,客户端通过工厂获取享元对象,并提供外在状态来使用它们

java 复制代码
// 享元接口
public interface Flyweight {
    void operation(String extrinsicState);
}
// 具体享元类
public class ConcreteFlyweight implements Flyweight{
    private String intrinsicState;

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

    @Override
    public void operation(String extrinsicState) {
        // 使用内在状态和外在状态执行操作
        System.out.println("操作: " + intrinsicState + " 附加状态: " + extrinsicState);
    }
}
//享元工厂
public class FlyweightFactory {
    private static HashMap<String, Flyweight> flyweights = new HashMap<>();

    public static Flyweight getFlyweight(String key) {
        if (!flyweights.containsKey(key)) {
            flyweights.put(key, new ConcreteFlyweight(key));
        }
        return flyweights.get(key);
    }
}
//客户端
public class Client {
    public static void main(String[] args) {
        Flyweight flyweight1 = FlyweightFactory.getFlyweight("shared intrinsic state 1");
        flyweight1.operation("extrinsic state 1");

        Flyweight flyweight2 = FlyweightFactory.getFlyweight("shared intrinsic state 2");
        flyweight2.operation("extrinsic state 2");
    }
}
相关推荐
李广坤36 分钟前
状态模式(State Pattern)
设计模式
李广坤2 小时前
观察者模式(Observer Pattern)
设计模式
李广坤3 小时前
中介者模式(Mediator Pattern)
设计模式
李广坤3 小时前
迭代器模式(Iterator Pattern)
设计模式
李广坤4 小时前
解释器模式(Interpreter Pattern)
设计模式
阿无,6 小时前
java23种设计模式之前言
设计模式
Asort7 小时前
JavaScript设计模式(八):组合模式(Composite)——构建灵活可扩展的树形对象结构
前端·javascript·设计模式
数据智能老司机7 小时前
数据工程设计模式——数据基础
大数据·设计模式·架构
笨手笨脚の10 小时前
设计模式-代理模式
设计模式·代理模式·aop·动态代理·结构型设计模式
Overboom17 小时前
[C++] --- 常用设计模式
开发语言·c++·设计模式