设计模式 - 原型模式

本贴最后更新于 929 天前,其中的信息可能已经天翻地覆

原型模式

image.png

使用场景

在某些场景下,实例化一个类的代价很大,如果需要实例化多个实例,就需要进行多次高代价的操作。又或者,一个实例的属性非常多,且随着程序的运行会动态变化,如果需要这个实例的一个副本,不方便直接通过类进行实例化。这个时候就可以通过原型模式,通过克隆来进行实例化。原型模式本质就是对实例的拷贝。

代码实现

原型抽象类

首先创建一个原型抽象类,并且定义一个clone的接口。

from abc import ABCMeta, abstractmethod
from copy import deepcopy


class Prototype(metaclass=ABCMeta):
    """
    原型模式的抽象类
    """
  
    @abstractmethod
    def clone(self):
        """clone抽象方法,具体类中一定实现它"""
        pass

具体类

需要实现原型模式的类继承原型抽象类,然后实现clone方法。

class Role(Prototype):
    """
    原型模式的具体类
    """
    def clone(self):
        """
        实现clone方法用来复制自己,通过深拷贝来复制并返回
        """
        return deepcopy(self)


r1 = Role()
r2 = r1.clone()
print(r1)
print(r2)

代码运行结果:

<__main__.Role object at 0x000001155705C2E0>
<__main__.Role object at 0x00000115571B21F0>
回帖
请输入回帖内容 ...