前言
GOF设计模式分三大类:
- 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。
- 结构型模式:关注类和对象之间的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
- 行为型模式:关注对象之间的交互,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。
一、原型模式
原型模式(Prototype Pattern)
- 定义:使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象。
- 解决问题:如何通过克隆来得到一个一模一样的对象?(通过克隆方法所创建的对象是全新的对象,它们在内存中拥有新的地址。)
- 使用场景:
- 创建新对象成本较大
- 系统要保存对象的状态
- 在运行时动态地创建和定制对象
- 组成:
- 原型接口(Prototype):声明克隆自身的接口。
- 具体原型(ConcretePrototype):实现原型接口,提供克隆自身的操作。
- 客户端(Client):让一个原型克隆自身,从而创建一个新的对象。
- 优点:
- 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率
- 可以使用深克隆的方式保存对象的状态。使用原型模式将对象复制一份并将其状态保存起来,以便在需要的时候使用,例如恢复到某一历史状态,可辅助实现撤销操作
- 缺点:
- 注意深克隆与浅克隆的区别和使用场景
二、原型模式示例
使用原型模式快速创建工作周报
import copy
class Prototype:
"""原型接口"""
def clone(self):
# 这里用深拷贝,这意味着对象及其所有引用的对象都将被复制
# 若不希望复制对象内部的引用类型,copy.copy()来执行浅拷贝
return copy.deepcopy(self)
class WeeklyLog(Prototype):
"""具体原型"""
def __init__(self, name=None, date=None, content=<