python3 最简单的实现 模版设计模式

2020-10-23 14:37:12 浏览数 (2)

在项目开发过程时,遇见某些子类的逻辑处理流程大致相同,可是用模板模式减少代码冗余,降低耦合。

例如实现某一窗体或者页面启动时,第一步需要加载启动界面图片资源,第二步加载个人信息,第三步加载个人钱包信息,第四步关闭或者隐藏上一个窗口(界面)。这个时候类可以写成如下方式:

代码语言: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()

0 人点赞