Posts 设计模式-克隆模式
Post
Cancel

设计模式-克隆模式

概念解析

克隆模式的核心是:通过拷贝自身属性来创建一个新对象,核心方法就是 clone 方法,包括两个步骤:

  • 分配一块新的内存空间给新的对象
  • 拷贝父本对象的所有属性

克隆模式的特点是:

  • 通过内存拷贝的方式进行复制,比new方式创建对象性能更好
  • 可以选用设计浅拷贝和深拷贝
  • 通过clone方式创建,不会执行类的初始化 __init__ 函数

设计模板

克隆模式比较简单,简单框架如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
from copy import copy, deepcopy


class Clone:
    "基类"

    def clone(self):
        "浅拷贝方式"
        return copy(self)

    def deepclone(self):
        "深拷贝方式"
        return deepcopy(self)

实例分析

提供一个对应用程序配置作备份的接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class AppConfig(Clone):
    "应用程序功能配置类"

    def __init__(self, configName):
        self.__configName = configName
        # self.parseFromFile('./config/default.xml')
        self.__frontType = '宋体'
        self.__frontSize = 14
        self.__language = '中文'
        self.__logPath = './logs/appException.log'

    def saveToFile(self, filePath):
        "保存配置"
        pass

    def copyConfig(self, configName):
        "创建配置的副本:clone接口"
        config = self.deepClone()
        config.__configName = conifigName
        return config

    def showInfo(self):
        print("%s 的配置信息如下:" % self.__configName)
        print("字体:", self.__frontType)
        print("字号:", self.__frontSize)
        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()

    newConfig = defaultConfig.copyConfig("tonyConfig")
    newConfig.setFontType("雅黑")
    newConfig.setFontSize(18)
    newConfig.setLanguage("English")
    newConfig.showInfo()
This post is licensed under CC BY 4.0 by the author.

设计模式-中介模式

设计模式-单例模式