设计模式 - 原型模式

发布于 更新于
本文目录
  1. 原型模式
  2. 使用场景
  3. 代码实现
  4. 原型抽象类
  5. 具体类

技术文章测试开发

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

原型模式

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>

来源:testingpai

继续阅读