概念解析
克隆模式的核心是:通过拷贝自身属性来创建一个新对象,核心方法就是 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()