基本介绍
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。
当直接创建对象的代价比较大时,则采用这种模式。
特点:仅存在一份,后面如果要用类似的就进行克隆拷贝,拷贝方式分2种,深拷和浅拷,原型允许个体中的属性存在差异
原型模式更适用于创建一个通用的模板,后续要使用时在此模板的基础上对实例属性进行一定范围内的变更。
该模式属于创建型模式。
案例图示
每台计算机的构成都是类似的,如果要同时组装多台计算机,可采用原型模式进行设计。
只实例化一次,减少实例化的消耗,后续个体都通过拷贝原型并修改其中属性实现差异化:
优缺点
优点:
- 性能提高,减少实例化时的内存消耗
- 节省内存
- 简化对象创建,同时避免了构造函数的约束,不受构造函数的限制直接复制对象,是优点,也有隐患,这一点还是需要多留意一些
缺点:
- 深拷贝和浅拷贝的使用需要事先考虑周到
- 某些编程语言中,拷贝会影响到静态变量和静态函数的使用
代码实现
用Python实现原型模式:
import copy
# 计算机原型
class ComputerPrototype:
def __init__(self) -> None:
self.cpu = None
self.gpu = None
self.ram = None
def getInfo(self):
return "cpu : %s\ngpu : %s\nram : %s" % (self.cpu, self.gpu, self.ram)
# 原型建造类
class Prototype:
def __init__(self) -> None:
self.prototype = ComputerPrototype()
def getComputer(self, cpu, gpu, ram):
computer = copy.deepcopy(self.prototype)
computer.__dict__.update({"cpu": cpu, "gpu": gpu, "ram": ram})
return computer
if __name__ == "__main__":
pro = Prototype()
computerOne = pro.getComputer(cpu="Intel", gpu="Nvidia", ram="Samsung")
computerSecond = pro.getComputer(cpu="AMD", gpu="AMD", ram="Kingston")
print(computerOne.getInfo())
print(computerOne.getInfo())
# cpu : Intel
# gpu : Nvidia
# ram : Samsung
# cpu : Intel
# gpu : Nvidia
# ram : Samsung