Prototype模式

之前讲到的Abstract Factory、Factory Method和Singleton模式都有一个共同点,就是它们都是用来创建对象的,因此在著名的GoF《设计模式》中将这些模式都归为创建型模式(creational patterns)。创建型模式中还包括prototype模式,但很可惜我个人觉得在这本经典的设计模式书中对prototype的介绍过于繁杂,以至于难以理解。所以这里试图用自己的语言来描述说明prototype模式。现实中的实例生活中如果我们去蛋糕店买蛋糕,会发现蛋糕店里陈列的样品通常每个样式只有一个,有的甚至只有图片样品,没有实物样品。当有客人买蛋糕时,就会告诉蛋糕店老板“我要一个这个样式的蛋糕”。而蛋糕店的老板则会告诉客人,做这个蛋糕需要多久,什么时间过来取蛋糕,然后吩咐西点师傅制作某一型号的蛋糕。这就是现实中蛋糕店里的prototype模式。 4812786.aspx

art01.gif

### Prototype 设计模式的原理 Prototype 模式是一种创建型设计模式,旨在通过复制现有的对象而不是通过常规构造函数来创建新对象。这种方式能够简化对象的创建工作流程,在某些情况下还能提高性能。 核心思想是在运行时拥有一个或多个原型对象,并能通过复制这些原型来获取新的实例。为了支持这种行为,通常会定义一个 `clone()` 方法用于执行浅拷贝操作;如果需要深拷贝,则需额外处理复杂的数据成员[^1]。 #### 关键特性 - **减少子类化需求**:无需为每一个具体类型编写专门的工厂方法。 - **动态注册能力**:可以在程序运行期间向系统中加入新的可克隆的对象。 - **灵活性高**:允许客户端代码决定何时以及如何复制对象。 ### 应用实例分析 假设有一个图形编辑器应用程序,其中包含多种类型的形状(圆形、矩形等),每种形状都有不同的属性设置选项。当用户想要在一个文档里多次使用相同的形状配置而不必每次都手动调整参数时,就可以利用 Prototype 模式快速生成相同特性的副本。 以下是基于此场景的一个简单 Java 实现: ```java // 定义抽象基类 Shape, 提供 clone 接口 abstract class Shape implements Cloneable { private String id; protected String type; public abstract void draw(); @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } // Getter 和 Setter 方法... } class Rectangle extends Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } // Override clone if necessary... } class Circle extends Shape { @Override public void draw() { System.out.println("Inside Circle::draw() method."); } // Override clone if necessary... } ``` 在这个例子中,`Shape` 是所有具体形状的基础类,并实现了 `Cloneable` 接口以便于后续的具体实现类可以通过覆写 `clone()` 来提供自己的复制逻辑。对于具体的形状如 `Rectangle`, `Circle` 则只需要关注自身的绘制功能即可[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值