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");
    }
}

你可能感兴趣的:(设计模式系列,java,设计模式)