Java享元设计模式

Java享元设计模式

定义

享元模式(Flyweight Pattern)是一种结构型设计模式,它的主要目的是减少内存使用和提高性能。它通过共享对象来减少内存使用,从而提高性能

对应角色

  • 享元工厂:用于创建具体享元类,维护相同的享元对象。
  • 抽象享元:定义需要共享的对象业务接口。
  • 具体享元类:实现抽象享元类的接口,完成某一具体逻辑。
  • 客户端:使用享元模式的组件,通过享元工厂取得享元对象

优缺点

优点

  • 减少内存使用:通过共享对象来减少内存使用,从而提高性能¹。
  • 降低对象数量:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力⁴。

缺点

  • 增加系统复杂度:需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。

应用场景

  • 文字编辑器:当需要在文本编辑器中创建大量相似的字母或数字时,可以使用享元模式来共享相同的字母或数字对象,减少内存使用和对象创建的数量。
  • 游戏中的角色:当需要在游戏中创建大量相似的角色时,可以使用享元模式来共享相同的角色对象,减少内存使用和对象创建的数量。
  • Web应用中的缓存:当需要在Web应用中缓存大量相似的对象时,可以使用享元模式来共享相同的对象,减少内存使用和对象创建的数量。
  • 数据库连接池:当需要在应用中管理大量数据库连接时,可以使用享元模式来共享相同的连接对象,减少内存使用和连接创建的数量

实例

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

interface Flyweight {
    public void operation(String state);
}

class ConcreteFlyweight implements Flyweight {
    private String intrinsicState;

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

    public void operation(String state) {
        System.out.println("Intrinsic State = " + this.intrinsicState);
        System.out.println("Extrinsic State = " + state);
    }
}

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

    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 FlyweightPatternDemo {
    public static void main(String[] args) {
        FlyweightFactory factory = new FlyweightFactory();
        Flyweight flyweight1 = factory.getFlyweight("aa");
        Flyweight flyweight2 = factory.getFlyweight("aa");
        flyweight1.operation("x");
        flyweight2.operation("y");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

幽·

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

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

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

打赏作者

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

抵扣说明:

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

余额充值