享元模式(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();
}
}
当客户点一杯咖啡时,咖啡店会从咖啡工厂获取相应口味的咖啡对象。如果咖啡工厂中已经有了这个口味的咖啡对象,那么就直接复用这个对象,而不是创建一个新的对象。这样就实现了对象的共享,降低了内存消耗。