Python 设计模式:原型模式

简介: 原型模式(Prototype Pattern)是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。原型模式能够让我们利用克隆技术在现有对象的基础上创建对象。

定义


原型模式(Prototype Pattern)是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。原型模式能够让我们利用克隆技术在现有对象的基础上创建对象。


说到克隆,一个著名的非技术性例子是名为多莉的绵羊,它是由苏格兰的研究人员通过克隆乳腺中的一个细胞创造的。


image.png


许多 Python 应用程序都使用了原型模式,但它很少被称为原型,因为克隆对象是语言的一个内置功能。


原型模式的想法是使用该对象的完整结构的拷贝来产生新的对象。我们将看到,这在 Python 中几乎是自然而然的,因为我们有一个拷贝功能,对使用这种技术有很大帮助。在创建一个对象的拷贝的一般情况下,所发生的是你对同一个对象做一个新的引用,这种方法叫做浅拷贝。但如果你需要复制对象,也就是原型的情况,你要做一个深拷贝。


实现


原型模式建议创建一个接口来创建现有对象的克隆。任何客户都可以依赖的对象。Python 中可以通过类来进行实例化:

  • 原型类:一个超类,它将包含对象克隆将具有的所有必要属性和方法。此外,Prototype 有一个抽象的 clone() 方法,它必须由所有子类实现。
  • 具体类:一旦我们创建了原型超类,我们就可以开始基于超类定义具体类。具体类是可选的,可以在应用程序中定义。

具体的类可以有自己的属性和方法,但它们总是有原始的原型属性和被覆盖的 clone() 版本。


image.png


在 Python 中,考虑为 Car 对象创建一个原型。让我们为汽车创建一个接口:

class Car:
    def __init__(self, engine="1500cc", color="D-white", seats=7):
        self.engine = engine
        self.color = color
        self.seats = seats
    def __str__(self):
        return f"{self.engine} | {self.color} | {self.seats}"


原型类:

  • 原型接口有一个字典数据结构来存储所有克隆的对象。
  • RegisterObject 方法在字典中添加元素,以新对象的名称为键,以现有对象为值。
  • DeregisterObject 方法从字典中删除条目。
  • 并且,最后通过 Clone 方法复制现有对象。克隆方法使用来自 Copy 模块的 deepcopy() 方法来克隆对象。
import copy
class Prototype:
    def __init__(self):
        """Dictionary that will stores cloned objects."""
        self._ClonedObjects = {}
    def RegisterObject(self, name, obj):
        """Method to store all clones of the existion objects."""
        self._ClonedObjects[name] = obj
    def DeregisterObject(self, name):
        """Method to delete the cloned object from the dictionary."""
        del self._ClonedObjects[name]
    def Clone(self, name, **kwargs):
        """Method to clone the object."""
        clonedObject = copy.deepcopy(self._ClonedObjects.get(name))
        clonedObject.__dict__.update(kwargs)
        return clonedObject

最后,我们利用 main 函数来测试:

if __name__ == "__main__":
    """The object that will be cloned.""" 
    defaultCar = Car()
    prototype = Prototype()
    """The object that will be cloned.""" 
    CarType1 = Car("1000cc", "Red", 4)
    """Registering the defaultCar in dictionary with its key as 'basicCar'"""
    prototype.RegisterObject('BasicCar', defaultCar)  
    prototype.RegisterObject('Type-1', CarType1)
    carOne = prototype.Clone('BasicCar', color = "Lake side brown")                                                      
    carTwo = prototype.Clone('Type-1',color = "Red") 
    carThree = prototype.Clone('Type-1', color = "Moon Dust Silver")
    print("Details of the default-car:", defaultCar)  
    print("Details of car-One:", carOne)        
    print("Details of car-Two:", carTwo)  
    print("Details of car-Three:", carThree)    

运行输出:

$ python protype.py 
Details of the default-car: 1500cc | D-white | 7
Details of car-One: 1500cc | Lake side brown | 7   
Details of car-Two: 1000cc | Red | 4
Details of car-Three: 1000cc | Moon Dust Silver | 4

总结


原型是一种创建型设计模式, 使你能够复制对象, 甚至是复杂对象, 而又无需使代码依赖它们所属的类。


所有的原型类都必须有一个通用的接口, 使得即使在对象所属的具体类未知的情况下也能复制对象。 原型对象可以生成自身的完整副本, 因为相同类的对象可以相互访问对方的私有成员变量。


原型模式减少了子类的数量,隐藏了创建对象的复杂性,并便于在运行时添加或删除对象。

相关文章
|
9月前
|
设计模式 SQL 人工智能
Python设计模式:从代码复用到系统架构的实践指南
本文以Python为实现语言,深入解析23种经典设计模式的核心思想与实战技巧。通过真实项目案例,展示设计模式在软件开发中的结构化思维价值,涵盖创建型、结构型、行为型三大类别,并结合Python动态语言特性,探讨模式的最佳应用场景与实现方式,帮助开发者写出更清晰、易维护的高质量代码。
472 1
|
9月前
|
设计模式 人工智能 算法
Python设计模式:从代码复用到系统架构的实践指南
本文探讨了电商系统中因支付方式扩展导致代码臃肿的问题,引出设计模式作为解决方案。通过工厂模式、策略模式、单例模式等经典设计,实现代码解耦与系统扩展性提升。结合Python语言特性,展示了模块化、装饰器、适配器等模式的实战应用,并延伸至AI时代的设计创新,帮助开发者构建高内聚、低耦合、易维护的软件系统。
437 0
|
11月前
|
设计模式 JavaScript Java
【设计模式】【创建型模式】原型模式(Prototype)
一、入门 什么是原型模式? 原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化类。 原型模式的核心是克隆(Clone),即通过复制现有
278 15
|
9月前
|
设计模式 人工智能 算法
python 设计模式
工厂模式是一种创建型设计模式,通过定义创建对象的接口,将实例化延迟到子类,实现对象创建与使用的分离。它包括简单工厂模式、工厂方法模式和抽象工厂模式,适用于不同复杂度的对象创建场景,提高系统灵活性和可扩展性。
163 4
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
设计模式 存储 Java
「全网最细 + 实战源码案例」设计模式——原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,通过复制现有对象来创建新对象,适用于创建成本高或复杂的对象场景。其核心思想是“克隆”,避免直接实例化类。结构上分为抽象原型类、具体原型类和客户端。优点包括减少对象创建成本、隐藏复杂性、简化实例创建;缺点是处理循环引用的复杂对象时较为麻烦。实现步骤为定义原型类、重写`clone()`方法并调用。注意事项包括浅拷贝与深拷贝的区别及`Cloneable`接口的使用。
252 20
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
设计模式 监控 算法
Python编程中的设计模式应用与实践感悟###
在Python这片广阔的编程疆域中,设计模式如同导航的灯塔,指引着开发者穿越复杂性的迷雾,构建出既高效又易于维护的代码结构。本文基于个人实践经验,深入探讨了几种核心设计模式在Python项目中的应用策略与实现细节,旨在为读者揭示这些模式背后的思想如何转化为提升软件质量的实际力量。通过具体案例分析,展现了设计模式在解决实际问题中的独特魅力,鼓励开发者在日常编码中积极采纳并灵活运用这些宝贵的经验总结。 ###

推荐镜像

更多