在项目开发过程时,遇见某些子类的逻辑处理流程大致相同,可是用模板模式减少代码冗余,降低耦合。
例如实现某一窗体或者页面启动时,第一步需要加载启动界面图片资源,第二步加载个人信息,第三步加载个人钱包信息,第四步关闭或者隐藏上一个窗口(界面)。这个时候类可以写成如下方式:
代码语言:javascript复制class LoadNewWindows:
def load(self):
print('启动界面...')
self.loadImg()
self.loadUserInfo()
self.loadWalletInfo()
def loadImg(self):
print('记载图片...')
def loadUserInfo(self):
print('加载用户信息...')
def loadWalletInfo(self):
print('加载钱包信息...')
loadwin=LoadNewWindows()
loadwin.load()
以上类定义了一个load方法,调用内部方法实现流程。
运行如下:
这个时候如果需要加载其它窗口,实现流程与以上实现类似,只是多了一个加载信息,例如需要额外加载在线用户信息;再或者不需要加载钱包信息,这个时候就可以以以上的类作为一个基类,继承后再新增方法或者重新调用步骤即可:
代码语言:javascript复制class loadOtherWindows(LoadNewWindows):
def load(self):
print('启动新界面...')
self.loadImg()
self.loadUserInfo()
self.loadOtherUserInfo()
def loadOtherUserInfo(self):
print('加载其它用户信息...')
以上方法为 LoadNewWindows 子类,并且有一个新的方法 loadOtherUserInfo,用于加载其它用户信息,其它流程与父类相似,只是少了加载钱包,因为在这里,我们设定的窗口是不需要加载钱包信息。在load中实现了流程的调用。最后调用两个类:
代码语言:javascript复制loadwin=LoadNewWindows()
loadwin.load()
print('n--------------分界线------------n')
loadOtherWin=loadOtherWindows()
loadOtherWin.load()
结果如下:
模板方法减少了代码冗余,降低了耦合,但是在可读性上有一定影响,但是开发时有文档的说明,却是问题不大。 完整代码如下:
代码语言:javascript复制class LoadNewWindows:
def load(self):
print('启动界面...')
self.loadImg()
self.loadUserInfo()
self.loadWalletInfo()
def loadImg(self):
print('记载图片...')
def loadUserInfo(self):
print('加载用户信息...')
def loadWalletInfo(self):
print('加载钱包信息...')
class loadOtherWindows(LoadNewWindows):
def load(self):
print('启动新界面...')
self.loadImg()
self.loadUserInfo()
self.loadOtherUserInfo()
def loadOtherUserInfo(self):
print('加载其它用户信息...')
loadwin=LoadNewWindows()
loadwin.load()
print('n--------------分界线------------n')
loadOtherWin=loadOtherWindows()
loadOtherWin.load()