跳转至

六种常用设计模式

设计模式种类

  • 创建性模式:

单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式

  • 结构型模式:

适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式,代理模式

  • 行为型模式:

模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、接解释器模式、状态模式、策略模式、职责链模式、访问者模式。

OOP七大法则

  • 开闭原则:对扩展开放,对修改关闭。
  • 里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立。
  • 依赖倒置原则:要面向接口编程,不要面向实现编程。
  • 接口隔离原则:要为各个类建立他们需要专用接口。
  • 迪米特法则:只与你的朋友直接交谈,不跟陌生人说话。
  • 合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
  • 单一职责原则:控制类的粒度大小、将对象解耦、提高其内聚性。

1) 单例模式。

单例模式是一种常用的软件设计模式。

在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。

应用场景:如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

2) 工厂模式。

工厂模式主要是为创建对象提供了接口。

应用场景如下:

a、 在编码时不能预见需要创建哪种类的实例。

b、 系统不应依赖于产品类实例如何被创建、组合和表达的细节。

3) 策略模式。

策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化独立于使用算法的客户。

应用场景如下。

a、 一件事情,有很多方案可以实现。

b、我可以在任何时候,决定采用哪一种实现。

c.、未来可能增加更多的方案。

d、 策略模式让方案的变化不会影响到使用方案的客户。

举例业务场景如下。 - 系统的操作都要有日志记录,通常会把日志记录在数据库里面,方便后续的管理,但是在记录日志到数据库的时候,可能会发生错误,比如暂时连不上数据库了,那就先记录在文件里面。日志写到数据库与文件中是两种算法,但调用方不关心,只负责写就是。 - 假设程序调用方要一个排序的功能接口,而排序算法有快速排序,插入排序,选择排序等等,调用方并不关心用哪个排序算法,则接口提供方根据自己的策略去选择不同的排序算法

4) 观察者模式。

观察者模式又被称作发布/订阅模式,定义了对象间一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

应用场景如下:

a、对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。

b、对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。

类似于一个事件的订阅,事件派发者不关心谁这个事件,观察者只需要注册订阅该事件即可

5) 迭代器模式。

迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

应用场景如下: - 当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍 历的时候,就应该考虑用迭代器模式。其实stl容器就是很好的迭代器模式的例子。 - 可以理解为foreach循环等提供的迭代器

6) 模板方法模式。

模板方法模式定义一个操作中的算法的骨架,将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。

场景举例: - 有限状态机