写给新手的设计模式教程——模版方法模式
零、写在前面
想写设计模式,是因为读完了《漫谈设计模式》,有颇多感触。
将自己对于设计模式的理解记录下来,一方面防止自己遗忘,另一方面也可以给新手们一些入门级的帮助。
如果你要我给你一个看下去的理由的话,那么我只说四个字——浅显易懂。
设计模式本来是一个很简单的东西,但是被专家们一总结一归纳,就变成了一套一套的理论。
我觉得对于新手来说,最重要的是搞懂“是什么”和“为什么”,至于更深层的东西,等你实践得多了自然就懂了。
文中示例所用语言为python,简洁明了。
个人理解难免有些偏差,如果有错误欢迎大家指出,我会及时改正的。
也欢迎大家提出各种意见建议。
重复一遍——浅显易懂。至于到底多浅显易懂,请往下看吧。
一、什么是设计模式?
在没有设计模式的年代,程序员们编程的过程中发现了许多代码结构上的问题,所以他们总结出来了一些通用的解决方法,统称——设计模式。
你可以把设计模式理解成一种“固定套路”,就好像武术中的见招拆招一样,你学会了这些套路,那么当你写程序遇到问题的时候就可以直接照搬了。
当然,问题是无穷的,套路是有限的。所以设计模式只是一种通用的套路,真正牛逼的人都是自己开宗立派创造新套路。
二、如何学习设计模式?
这个设计模式能解决什么问题?
这个设计模式是怎么解决这个问题的?
如果你能回答上来这两个问题,那么恭喜你,你已经学会了这个设计模式。
与之相对应,我们学习的过程,就是回答这两个问题的过程。
三、第一个模式——模版方法模式
先来看问题:
class walk_to_park(): # 假设我们在家里,闲的没事想去公园玩会,那我们就走着去 def open_the_door(): # 开门 ... def walk(): # 走去公园 ... class drive_to_park(): # 假设我们在家里,突然微信摇到一个美女说约我们去公园!那得赶快开车去啊! def open_the_door(): # 开门 ... def drive(): # 开车去公园 ...
看注释大家应该已经明白这两个类都是干嘛的了吧。
问题很明显——代码重复。
我们在每个类当中都有一个开门方法,乍一看好像没什么,反正就两个类。但是如果我们有20个类、100个类呢?
你可能会说那我们复制一下就行了嘛!那么如果我们需要修改open_the_door()方法呢?很明显我们不可能去手动修改每一个类里的方法,既浪费时间又容易出错。
所以我们要使用第一种设计模式——模版方法模式。
看代码:
class go_out: def open_the_door(): ... class walk_to_park(go_out): def walk(): ... class drive_to_park(go_out): def drive(): ... justwalk = walk_to_park() justwalk.open_the_door() justwalk.walk() justdrive = drive_to_park() justdrive.open_the_door() justdrive.drive()
我们把重复的代码提取出来,写到了一个新的类里,然后继承这个类。这样既不影响子类的功能,又消除了重复代码。
现在,无论我们有100个类还是100万个类,需要修改open_the_door()方法的时候都只需要修改go_out类中的这个方法就可以了。
很简单吧,其实设计模式就是这么个东西。
下次我们会学习单例模式。
最后,请你来回答这两个问题:
模版方法模式能解决什么问题?
模版方法模式是怎么解决这个问题的?