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. 课程末尾配有专门的练习题与答案解析,能够加深开发者对于设计模式的理解

### 遇到问题怎么办?

欢迎在下方评论区留言,或者扫码进群,有许多经验丰富的大佬为你答疑解惑。

![超人编程](https://qiniu.chaorencode.com/d1d8aacc011261e1bb477039481ba0c6/d1d8aacc011261e1bb477039481ba0c6.jpg?imageView2/3/w/1024/h/1024/interlace/1/format/webp)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值