Java设计模式之亨元模式(Flyweight Pattern)

亨元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享对象来最大限度地减少内存使用和提高性能。该模式适用于需要创建大量相似对象的情况,其中许多对象具有相同的状态。通过共享相同的状态,亨元模式可以减少内存消耗,并使对象的创建和管理更加高效。

以下是亨元模式的几个关键角色:

  • 亨元(Flyweight):表示一个共享的对象,存储了内部状态和外部状态。内部状态是指对象共享的部分,而外部状态是对象的变化部分,需要在运行时进行传递。
  • 亨元工厂(Flyweight Factory):负责创建和管理亨元对象。它维护一个亨元池(Flyweight Pool)用于存储已经创建的亨元对象,并根据客户端的请求返回相应的亨元对象。

下面是一个示例,展示了如何使用亨元模式来共享相同的字符串对象:

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

// 亨元接口
interface Flyweight {
    void display();
}

// 具体的亨元实现类
class ConcreteFlyweight implements Flyweight {
    private String intrinsicState;

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

    public void display() {
        System.out.println("Intrinsic State: " + intrinsicState);
    }
}

// 亨元工厂类
class FlyweightFactory {
    private Map<String, Flyweight> flyweightPool;

    public FlyweightFactory() {
        flyweightPool = new HashMap<>();
    }

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

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

        // 获取共享对象
        Flyweight flyweight1 = factory.getFlyweight("A");
        Flyweight flyweight2 = factory.getFlyweight("B");
        Flyweight flyweight3 = factory.getFlyweight("A");

        // 调用共享对象的方法
        flyweight1.display();  // 输出:"Intrinsic State: A"
        flyweight2.display();  // 输出:"Intrinsic State: B"
        flyweight3.display();  // 输出:"Intrinsic State: A"

        // 验证对象是否为同一个对象
        System.out.println(flyweight1 == flyweight2);  // 输出:false
        System.out.println(flyweight1 == flyweight3);  // 输出:true
    }
}

在上述示例中,ConcreteFlyweight 表示具体的亨元实现类,它包含了一个内部状态 intrinsicState,用于存储共享的状态。FlyweightFactory 是亨元工厂类,负责创建和管理亨元对象。它维护了一个 flyweightPool 用于存储已经创建的亨元对象,并根据客户端的请求返回相应的亨元对象。

在客户端代码中,通过亨元工厂获取共享对象,并调用其方法。可以看到,虽然创建了两个具有相同内部状态的亨元对象,但实际上它们是同一个对象,因为它们共享相同的状态。这样可以减少内存消耗,并提高性能。

亨元模式在需要创建大量相似对象且内部状态可以共享的场景中非常有用,它能够有效地提高系统的性能和资源利用率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值