python设计模式
设计模式是什么?
设计模式(Design Pattern)是一个专业术语,指在软件工程中,针对在软件设计上出现的各种问题所提出的一般性解决方案。1994 年,由「四人帮」(Gang of Four,简称 GoF)Erich Gamma,Richard Helm,Ralph Johnson,和 John Vlissides 等人出版了《设计模式:可复用面向对象软件的基础》一书,成功地将设计模式普及到了计算机科学中,被业界奉为设计模式的的经典参考书目。
为什么要使用设计模式?
如上所述,设计模式用于解决软件设计出现的问题。它不会直接实现程序中的具体功能,而是通过将开发过程中反复遇到的各种相似问题抽象成一类问题,并提出它的解决方案。合理地在项目中使用设计模式,能够提高代码复用性并降低代码之间的耦合度,大大提高了程序的可维护性与可扩展性。
打比方说,李华和 Tom 分别写了一段代码描述自己一天所做的事,如下所示:
# 李华的代码
class Lihua:
def qichuang(self):
print("起床")
def chifan(self):
print("吃饭")
def shuijiao(self):
print("睡觉")
# Tom的代码
class Tom:
def wake_up(self):
print("wake up")
def eat(self):
print("eat")
def sleep(self):
print("sleep")
虽然两个人做的事情都差不多,但是对接口的命名规则却不统一,有时会给开发者带来许多麻烦。我们可以考虑对代码进行如下处理:
class TomAdapter:
def __init__(self):
tom = Tom()
self.qichuang = tom.wake_up
self.chifan = tom.eat
self.shuijiao = tom.sleep
lihua = Lihua()
tom = TomAdapter()
lihua.chifan()
tom.chifan()
上面代码的输出结果是:
吃饭
eat
增加了这一层中间类之后,我们就可以通过实例化TomAdapter
类,并调用chifan()
这个接口去间接调用 Tom 的代码了。这种设计模式被称为「适配器模式」,它可以伪装现有类的接口,达到按照规范统一接口名的效果。
随着软件工程的发展,项目也越来越庞大,开发人员也越来越有必要去学习设计模式相关的知识,以提高项目的稳定性、可维护性与可扩展性。
如何使用设计模式?
如果你已经有了实际项目的开发经验,那么或许你早就在项目里面用到了设计模式的思想,只是不自知而已。它作为众多码农千锤百炼总结出来的经验,在日常的面向对象开发中自然不会缺少相关情景。不得不说的是,《设计模式》一书里关于模式本身的描述较为抽象,以至于很多人只能够看得懂书中的案例部分并照葫芦画瓢,甚至有部分开发者已经陷入了「为了用设计模式而用设计模式」的误区,反而把简单的逻辑复杂化。在这里我想引用一段《倚天屠龙记》中的对话:
“无忌,我教你的还记得多少?”“回太师傅,我只记得一大半”
“那,现在呢?”“已经剩下一小半了”
“那,现在呢?”“我已经把所有的全忘记了!”
“好,你可以上了…”
最终张无忌使用当场从张三丰处学到的太极剑法大败玄冥二老,此即「无招胜有招」。设计模式亦是如此,它作为流传甚广的招式,一开始可能需要在自己的 demo 里刻意练习,随着经历的项目、参考的源码不断变多,具体事物抽象化的经验也日渐丰富,最终达到信手拈来,成为不拘泥于「设计模式」的优秀开发者。
设计模式的分类
在《设计模式:可复用面向对象软件的基础》一书中,将设计模式分成了三类共 23 种:
-
创建型模式(Creational Patterns)
-
结构型模式(Structural Patterns)
-
行为型模式(Behavioral Patterns)
课程特点
- 面向学习完面向对象编程思想的新手开发者。
- 以 Python 为基础,将设计模式中抽象的描述具体到现实应用场景,并配以代码实例
- 课程末尾配有专门的练习题与答案解析,能够加深开发者对于设计模式的理解