目 录CONTENT

文章目录

Java设计模式之享元模式

在等晚風吹
2023-12-26 / 0 评论 / 0 点赞 / 15 阅读 / 0 字 / 正在检测是否收录...

Java设计模式之享元模式

欢迎来到我的博客!今天,让我们一同深入研究Java设计模式的精彩世界,探索享元模式的奇妙之处。享元模式是一种结构型设计模式,旨在通过共享对象来最小化内存使用或计算开销。让我们通过本文了解享元模式的概念、使用方法以及适用场景。

1 享元模式是什么?

享元模式是一种以共享对象来减小内存占用和提高性能的设计模式。它适用于需要创建大量相似对象的情况,通过共享相同的部分,减少了重复对象的创建,从而降低了系统的开销。

2 使用方法

享元模式主要包括以下几个核心角色:享元接口(Flyweight)、具体享元(ConcreteFlyweight)、非共享具体享元(UnsharedConcreteFlyweight)、享元工厂(FlyweightFactory)和客户端(Client)。

2.1 享元接口(Flyweight)

public interface Flyweight {
    void operation();
}

2.2 具体享元(ConcreteFlyweight)

public class ConcreteFlyweight implements Flyweight {
    private String intrinsicState;

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

    @Override
    public void operation() {
        System.out.println("Concrete Flyweight operation with intrinsic state: " + intrinsicState);
    }
}

2.3 非共享具体享元(UnsharedConcreteFlyweight)

public class UnsharedConcreteFlyweight implements Flyweight {
    private String allState;

    public UnsharedConcreteFlyweight(String allState) {
        this.allState = allState;
    }

    @Override
    public void operation() {
        System.out.println("Unshared Concrete Flyweight operation with all state: " + allState);
    }
}

2.4 享元工厂(FlyweightFactory)

import java.util.HashMap;
import java.util.Map;

public class FlyweightFactory {
    private Map<String, Flyweight> flyweights = new HashMap<>();

    public Flyweight getFlyweight(String key) {
        if (!flyweights.containsKey(key)) {
            flyweights.put(key, new ConcreteFlyweight(key));
        }
        return flyweights.get(key);
    }
}

2.5 客户端(Client)

public class Client {
    public static void main(String[] args) {
        FlyweightFactory factory = new FlyweightFactory();

        Flyweight flyweight1 = factory.getFlyweight("shared");
        flyweight1.operation();

        Flyweight flyweight2 = factory.getFlyweight("shared");
        flyweight2.operation();

        Flyweight flyweight3 = new UnsharedConcreteFlyweight("non-shared");
        flyweight3.operation();
    }
}

3 适用场景

享元模式适用于以下场景:

  • 大量对象的创建和销毁会带来很大的系统开销。
  • 对象的大部分状态可以外部化,即可以从对象中剥离出来。
  • 多个对象共享相同的状态,而且这些状态是不可变的。

4 总结

享元模式是一种高效利用内存的设计模式,特别适用于需要创建大量相似对象的场景。通过共享对象的方式,减小了内存占用,提高了系统性能。希望通过本文的介绍,你对享元模式有了更深刻的理解。如果你对其他设计模式也感兴趣,敬请继续关注我的博客,我将为你带来更多精彩的内容!感谢阅读!

0

评论区