Python设计模式创建型原型模式

作者:范桂飓 时间:2023-07-21 21:19:25 

一、原型模式

原型是相对于复制、克隆而言的,但是不同于模板,模板创造出的东西是一模一样,而原型创造出的东西是允许存在差异化和个性化的。

原型模式的实现思路是:“深拷贝” 和 “属性更新”。定义一个原型,设计一个拷贝接口,不需要频繁实例化类,只需要拷贝。

优点:

  • 减少因为对象实例化而产生的损耗,并实行动态装载。

二、应用场景

Python设计模式创建型原型模式

三、代码示例

要实现多个人的自我介绍,一般方法是每个人都创建一个对象,但是使用原型模式之后,只需要实例化一个对象(标准人),后面的人都已这个标准人为基础来实现个性化。

import copy

class Information:
    """个人信息"""

    def __init__(self):
        self.name = None
        self.ager = None
        self.height = None

    def run(self):
        """
        自我介绍方法
        :return:
        """
        print("我叫{}: 年龄:{} 身高:{}".format(self.name, self.ager, self.height))

class Prototype:
    def __init__(self, obj):
        self.copy_object = obj()

    def clone(self, **attr):
        obj = copy.deepcopy(self.copy_object)
        obj.__dict__.update(attr)
        return obj

if __name__ == '__main__':
    test = Prototype(Information)
    a = test.clone(name='张山', ager="30", height='170cm')
    a.run()
    b = test.clone(name='李飞', ager="20", height='190cm')
    b.run()

来源:https://is-cloud.blog.csdn.net/article/details/122934315

标签:Python,设计模式,原型模式
0
投稿

猜你喜欢

  • SQL SERVER 2014 安装图解教程(含SQL SERVER 2014下载)

    2024-01-16 05:16:07
  • 一文教你用Python中progress库实现进度条

    2023-09-14 10:28:31
  • Python使用pymysql从MySQL数据库中读出数据的方法

    2024-01-26 15:26:24
  • Django权限机制实现代码详解

    2022-09-18 01:21:51
  • HTTP状态码

    2009-09-21 12:46:00
  • python对RabbitMQ的简单入门使用教程

    2021-01-13 17:53:44
  • CentOS7服务器中apache、php7以及mysql5.7的安装配置代码

    2023-11-19 02:14:52
  • python调用百度语音REST API

    2022-09-16 18:19:07
  • PHP的mysqli_select_db()函数讲解

    2023-06-07 18:59:44
  • ECharts设置x轴刻度间隔的2种解决方法

    2023-08-28 04:18:38
  • python matplotlib.pyplot.plot()参数用法

    2023-07-13 17:39:48
  • 一文详解golang通过io包进行文件读写

    2024-05-09 10:07:52
  • Next.js应用转换为TypeScript方法demo

    2024-05-11 09:36:17
  • Vue中keep-alive的两种应用方式

    2024-05-09 15:10:53
  • asp如何计算下载一个文件需要多长时间?

    2009-11-25 20:17:00
  • Python 中使用 argparse 解析命令行参数

    2023-10-26 14:10:42
  • windows下python虚拟环境virtualenv安装和使用详解

    2023-08-30 11:06:39
  • Python 类属性与实例属性,类对象与实例对象用法分析

    2023-03-12 01:43:03
  • Python使用PyCrypto实现AES加密功能示例

    2022-09-18 13:23:57
  • Python的Flask框架应用调用Redis队列数据的方法

    2023-04-20 14:14:38
  • asp之家 网络编程 m.aspxhome.com