设计模式之享元模式

享元模式是一种通过共享对象的内部状态来减少内存占用和提高性能的设计模式。它区分了可共享的内部状态和每个对象独有的外部状态。享元接口定义操作,具体享元类实现这些操作,享元工厂则负责对象的创建和管理,提供复用。这种模式在需要大量细粒度对象的场景下特别有用,能有效降低系统资源消耗。
摘要由CSDN通过智能技术生成

        享元模式是一种结构型设计模式,它通过共享对象来有效地支持大量细粒度的对象共享,以减少内存占用和提高性能。

        享元模式的核心思想是将对象分为内部状态(Intrinsic State)和外部状态(Extrinsic State)。内部状态是可以被多个对象共享的,而外部状态是每个对象独立拥有的。通过共享内部状态,可以减少对象的创建和存储开销。

享元模式的关键要素包括:

  • 享元接口:定义了共享对象的接口,包含对内部状态和外部状态的操作方法。
  • 具体享元类:实现了享元接口,包含了内部状态,并为内部状态提供了共享。
  • 享元工厂类:负责创建和管理享元对象,可以通过工厂方法获取享元对象。
  • 客户端:使用享元对象的客户端代码,通过享元工厂获取享元对象,并设置外部状态。

享元模式的优点包括:

  • 减少内存占用和对象创建的开销,提高了系统性能。
  • 提供了对象的复用,可以共享对象,减少了对象的数量。
  • 分离了内部状态和外部状态,使得系统更易于扩展和维护。

下面是一个简单的享元模式示例:

// 享元接口
interface Flyweight {
    void operation(String extrinsicState);
}

// 具体享元类
class ConcreteFlyweight implements Flyweight {
    private String intrinsicState;

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

    public void operation(String extrinsicState) {
        System.out.println("Intrinsic state: " + intrinsicState);
        System.out.println("Extrinsic state: " + extrinsicState);
    }
}

// 享元工厂类
class FlyweightFactory {
    private Map<String, Flyweight> flyweights = new HashMap<>();

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

// 客户端代码
public class Client {
    public static void main(String[] args) {
        FlyweightFactory factory = new FlyweightFactory();

        Flyweight flyweight1 = factory.getFlyweight("key1");
        flyweight1.operation("state1");

        Flyweight flyweight2 = factory.getFlyweight("key2");
        flyweight2.operation("state2");

        Flyweight flyweight3 = factory.getFlyweight("key1");
        flyweight3.operation("state3");
    }
}

输出结果:

         在上述示例中,我们定义了享元接口Flyweight,并实现了具体享元类ConcreteFlyweight。享元工厂类FlyweightFactory负责创建和管理享元对象。

        在客户端代码中,我们通过享元工厂获取享元对象,并设置外部状态。在第一次获取享元对象时,工厂会创建新的享元对象并将其缓存起来。在后续获取同样外部状态的享元对象时,工厂直接返回缓存中的对象。

                通过享元模式,我们可以有效地共享对象,减少内存占用和对象创建的开销。这种方式适用于需要大量细粒度对象的场景,并且可以提高系统性能和资源利用率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲤鱼程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值