设计模式-纯文字描述

小弧光的博客 / 2023-08-04 / 原文

设计模式在很多面试题中经常出现,同时,在写大型项目中,设计模式可以让代码更简洁,架构更合理,所以是我们必须要掌握的。

 

1、观察者模式

观察者模式是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。一般需要以下几步:

1、定义多个 events

2、定义多个 subscribers:subscriber 继承统一的接口(比如update()方法)

3、定义一个publisher:定义subscribe 、unsubscribe、notify等方法,并且成员有一个hashmap,对应不同的event有多个subscribers。

4、定义一个类Entity,定义多个行为函数,同时成员有publisher,然后通过publisher来绑定某个event到publisher的subscribers上。

这样,当Entity有某个行为调用时,则通过publisher间接调用subscriber的update函数。

 

实际案例:在界面点击了一个按钮,需要多个地方同时更新或加载,这时候就需要观察者模式。

 

2、装饰器模式

俄罗斯套娃,可以一层层warp某个行为

实际案例:比如同一份数据,可以选择通过签名、加密、压缩等传输,一层层处理。

 

3、命令模式

实际案例:

1)针对客户端发来的不同类型的请求,都调用handle()函数,只是对于不同类似的请求实际的handle实现不一样。

2)我们键盘上有不同的按钮,但是对于不同的按钮,应用的处理逻辑不同。但是对于快捷键、菜单可能对应同一种行为。

3)  比如羊肉串店,客户点了鸡翅、羊肉串等多种菜,服务员接到订单后统一下发给不同的烤串员工去执行。

 

4、代理模式

实际案例:无法直接访问公司局域网,需要通过某台代理服务器,间接实现访问公司局域网

 

5、策略模式

可以通过设置不同的策略,实现不同的行为,设置的策略实际上就是接口。

实际案例:洗衣机有多个功能,不同的功能对应不同的算法实现。

 

6、责任链(行为型)

连接一堆的处理,定义各种 handler,将请求和处理分开

实际案例:比如某个员工请假,需要一级一级审批请假流程。或者用户购物,需要一层层验证权限、记录日志才能继续后续的购买行为。

 

7、原型模式

实际案例:为了获得一个同样的细胞,我们需要一个克隆技术

 

8、迭代器模式

依赖倒置原则,获取到迭代器,而不做具体的实现。只对外暴露一个顺序访问元素的方法。

优点:责任分离,把对象遍历的责任交给迭代器,让集合对象专注自己的功能。

 

参考:

https://www.bilibili.com/video/BV1uk4y127hG/?spm_id_from=333.788&vd_source=1b9978cb3a8a617140f288ca2f7659bf

https://www.bilibili.com/video/BV1614y1S7qs/?spm_id_from=333.337.search-card.all.click&vd_source=1b9978cb3a8a617140f288ca2f7659bf