python设计模式

python设计模式

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