通俗易懂设计模式(享元模式)

59 阅读1分钟

享元模式(Flyweight Pattern)是一种结构型设计模式,它用于减少对象的创建,从而降低内存消耗。它通过共享技术实现相似对象的复用。在享元模式中,可以将对象分为内部状态和外部状态。内部状态是可以共享的,而外部状态是不可以共享的。

假设我们有一个咖啡店,需要制作各种口味的咖啡。我们可以使用享元模式来实现这个需求。首先,我们创建一个咖啡接口(Coffee)和一个具体的咖啡实现类(ConcreteCoffee)。然后,我们创建一个咖啡工厂(CoffeeFactory),用于管理咖啡对象的创建和共享。

// 咖啡接口
interface Coffee {
    void drink();
}

// 具体咖啡实现类
class ConcreteCoffee implements Coffee {
    private String flavor;

    public ConcreteCoffee(String flavor) {
        this.flavor = flavor;
    }

    @Override
    public void drink() {
        System.out.println("Drinking " + flavor + " coffee");
    }
}

// 咖啡工厂
class CoffeeFactory {
    private Map<String, Coffee> coffeeMap = new HashMap<>();

    public Coffee getCoffee(String flavor) {
        Coffee coffee = coffeeMap.get(flavor);
        if (coffee == null) {
            coffee = new ConcreteCoffee(flavor);
            coffeeMap.put(flavor, coffee);
        }
        return coffee;
    }
}

现在,我们可以在咖啡店中使用咖啡工厂来创建和共享咖啡对象。

class CoffeeShop {
    private CoffeeFactory coffeeFactory;

    public CoffeeShop() {
        coffeeFactory = new CoffeeFactory();
    }

    public void orderCoffee(String flavor) {
        Coffee coffee = coffeeFactory.getCoffee(flavor);
        coffee.drink();
    }
}

当客户点一杯咖啡时,咖啡店会从咖啡工厂获取相应口味的咖啡对象。如果咖啡工厂中已经有了这个口味的咖啡对象,那么就直接复用这个对象,而不是创建一个新的对象。这样就实现了对象的共享,降低了内存消耗。