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