设计模式|青训营笔记

74 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

创建型模式

工厂模式

特点

最常用的设计模式。

定义一个创建对象的接口,让工厂类根据传入的参量决定创建出哪一种产品类的实例

优点

增加产品时只需要新扩展一个工厂类就可以,增加对象时只需要知道名称就可以

场景
  • 日志记录器,可选择记录到哪个位置。
  • 连接服务器时,可将几个协议作为产品类,共同实现一个接口

抽象工厂模式

特点

围绕一个中心工厂,创建别的小工厂。

提供一个接口,用于创建一系列相关的接口,而无需指定具体的类

优点:

产品族中的多个对象被组合在一起工作时,保证客户端只使用同一个产品族中的对象

使用场景
  • 属于同一产品族的一系列相关产品对象一起创建时,可以避免大量重复代码。
  • 提供一个产品类的库,所有的产品以同样的接口出现

单例模式

特点

保证一个类只有一个实例,并提供一个全局访问点。

保证内容的一致性。

优点
  • 无需每次创建实例,减少内存开销
  • 避免对资源的重复占用
场景
  • 任务管理器
  • 打印机、回收站等
  • 需要被共享的场合可以使用单例模式,节省内存且加快访问速度

行为型模式

策略模式

特点

定义算法群,一个类的行为随着给出策略的变化而更改。

优点
  • 避免了大量 if···else 的冗杂结构
  • 算法可以自由切换,只需变换相应的策略
  • 扩展性良好
场景
  • 需要动态选择几种算法中的一种
  • 有很多相似的类,只有行为不一样
  • 一个对象有很多的行为

注意 :一个系统的策略多于四个需使用混合模式,解决策略类膨胀问题

模板模式

(个人理解)多态的运用

特点

定义一个算法的骨架,然后一些步骤延迟到子类实现。

可以达到子类在不改变算法结构的情况下,重新定义算法中的某些步骤。

优点
  • 提取公共部分,便于维护
  • 行为由父类控制,由子类来实现
场景
  • 重要、复杂的方法可以作为模板来使用

观察者模式

特点

一对多的关系可以使用该模式。 当一个对象被修改时,会自动通知依赖它的所有对象们。

优点
  • 降低了目标与观察者之间的耦合关系
  • 符合”开闭原则“
场景
  • 一个对象必须通知其他对象,而并不知道这些对象是谁。
  • 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变


\