06.克隆模式

定义

用原型实例指定要创建对象的种类,并通过拷贝这些原型的属性来创建新的对象。

浅拷贝 copy() 深拷贝 deepcopy()

克隆模式的抽象模型

代码框架

from copy import copy, deepcopy

class Clone:
    """克隆的基类"""

    def clone(self):
        """浅拷贝的方式克隆对象"""
        return copy(self)

    def deepClone(self):
        """深拷贝的方式克隆对象"""
        return deepcopy(self)

类图

基于框架的实现

from copy import copy, deepcopy  
  
  
class Clone:  
    """克隆的基类"""  
  
    def clone(self):  
        """浅拷贝的方式克隆对象"""  
        return copy(self)  
  
    def deepClone(self):  
        """深拷贝的方式克隆对象"""  
        return deepcopy(self)  
  
  
class AppConfig(Clone):  
    """应用程序功能配置"""  
  
    def __init__(self, configName):  
        self.__configName = configName  
        self.parseFromFile("./config/default.xml")  
  
    def parseFromFile(self, filePath):  
        """  
        从配置文件中解析配置项        真实项目中通过会将配置保存到配置文件中,保证下次开启时依然能够生效;        这里为简单起见,不从文件中读取,以初始化的方式来模拟。        
        """        
        self.__fontType = "宋体"  
        self.__fontSize = 14  
        self.__language = "中文"  
        self.__logPath = "./logs/appException.log"  
  
    def saveToFile(self, filePath):  
        """  
        将配置保存到配置文件中        这里为简单起见,不再实现        
        """        
        pass  
  
    def copyConfig(self, configName):  
        """创建一个配置的副本"""  
        config = self.deepClone()  
        config.__configName = configName  
        return config  
  
    def showInfo(self):  
        print("%s 的配置信息如下:" % self.__configName)  
        print("字体:", self.__fontType)  
        print("字号:", self.__fontSize)  
        print("语言:", self.__language)  
        print("异常文件的路径:", self.__logPath)  
  
    def setFontType(self, fontType):  
        self.__fontType = fontType  
  
    def setFontSize(self, fontSize):  
        self.__fontSize = fontSize  
  
    def setLanguage(self, language):  
        self.__language = language  
  
    def setLogPath(self, logPath):  
        self.__logPath = logPath  
  
  
def testAppConfig():  
    defaultConfig = AppConfig("default")  
    defaultConfig.showInfo()  
    print()  
  
    newConfig = defaultConfig.copyConfig("tonyConfig")  
    newConfig.setFontType("雅黑")  
    newConfig.setFontSize(18)  
    newConfig.setLanguage("English")  
    newConfig.showInfo()  
  
  
testAppConfig()

应用场景

  • 如果创建新对象(如复杂对象)成本较高,我们可以利用已有的对象进行复制来获得。
  • 类的初始化需要消耗非常多的资源时,如需要消耗很多的数据、硬件等资源。
  • 可配合备忘录模式做一些备份的工作。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇