小胖子的Java设计模式-原型模式

原型模式(Prototype Pattern)

背景介绍:

小胖子发现有些顾客对特定口味的披萨特别感兴趣,而且他们常常会要求披萨的配料、大小等细节完全相同。为了满足这一需求,小胖子决定引入原型模式,通过复制现有披萨的原型来创建新的披萨对象。

设计模式应用:
原型模式

为了方便复制现有披萨的细节,小胖子引入了原型模式。他创建了一个披萨原型管理器,其中包含了各种口味的披萨原型。当顾客需要相同口味的披萨时,可以从原型管理器中复制相应的原型,从而快速创建新的披萨对象。

代码示例:
import java.util.HashMap;
import java.util.Map;

// 披萨原型接口
interface PizzaPrototype {
    PizzaPrototype clone();
}

// 具体披萨原型类
class ConcretePizzaPrototype implements PizzaPrototype {
    private String flavor;
    private String size;
    private String toppings;

    public ConcretePizzaPrototype(String flavor, String size, String toppings) {
        this.flavor = flavor;
        this.size = size;
        this.toppings = toppings;
    }

    @Override
    public PizzaPrototype clone() {
        // 实现披萨原型的复制
        return new ConcretePizzaPrototype(this.flavor, this.size, this.toppings);
    }

    @Override
    public String toString() {
        return "ConcretePizzaPrototype{" +
                "flavor='" + flavor + '\'' +
                ", size='" + size + '\'' +
                ", toppings='" + toppings + '\'' +
                '}';
    }
}

// 披萨原型管理器
class PizzaPrototypeManager {
    private Map<String, PizzaPrototype> prototypes = new HashMap<>();

    // 添加披萨原型
    public void addPrototype(String key, PizzaPrototype prototype) {
        prototypes.put(key, prototype);
    }

    // 获取披萨原型
    public PizzaPrototype getPrototype(String key) {
        return prototypes.get(key).clone();
    }
}

// 客户端
public class PrototypePatternExample {
    public static void main(String[] args) {
        // 创建披萨原型管理器
        PizzaPrototypeManager prototypeManager = new PizzaPrototypeManager();

        // 添加不同口味的披萨原型
        prototypeManager.addPrototype("Margherita", new ConcretePizzaPrototype("Margherita", "Medium", "Tomato, Mozzarella"));
        prototypeManager.addPrototype("Pepperoni", new ConcretePizzaPrototype("Pepperoni", "Large", "Tomato, Pepperoni, Cheese"));

        // 顾客需要一份Margherita口味的披萨
        PizzaPrototype margheritaPizza = prototypeManager.getPrototype("Margherita");
        System.out.println("顾客1的披萨:" + margheritaPizza);

        // 顾客需要一份Pepperoni口味的披萨
        PizzaPrototype pepperoniPizza = prototypeManager.getPrototype("Pepperoni");
        System.out.println("顾客2的披萨:" + pepperoniPizza);
    }
}
通过原型模式解决的问题

通过引入原型模式,小胖子成功解决了以下问题:

  1. 快速创建相似对象: 原型模式允许小胖子通过复制披萨的原型,快速创建新的披萨对象,减少了对象的创建时间和资源消耗。
  2. 维护披萨细节一致性: 顾客可以根据已有口味的披萨原型创建新的披萨对象,确保了披萨的配料、大小等细节的一致性,满足了一些特定口味的顾客需求。
  3. 降低内存占用: 通过共享相同口味的披萨原型,减少了相似对象的创建开销,降低了内存占用,提高了系统的性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值