python设计模式

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)

课程特点

  1. 面向学习完面向对象编程思想的新手开发者。
  2. 以 Python 为基础,将设计模式中抽象的描述具体到现实应用场景,并配以代码实例
  3. 课程末尾配有专门的练习题与答案解析,能够加深开发者对于设计模式的理解