小话设计模式

一.背景

在我们平时开发过程中,遇到最多的问题基本上都是软件设计相关的一系列问题,如设计不合理,造成开发效率低下,维护和扩展性底,bug率高,那么这个时候优秀的设计模式就至关重要了。

学习设计模式可以帮助软件开发人员更好地设计和开发高质量的软件系统。设计模式是在软件开发中经过实践证明有效的最佳实践的总结,它们提供了一组可复用的解决方案,可帮助开发人员处理常见的软件设计问题。

以下是设计模式对我们日常开发维护起到的一些好处:

  1. 提高代码质量:设计模式鼓励开发人员使用一些经过验证的解决方案,这些方案已经在实践中证明是有效的。通过使用这些解决方案,开发人员可以编写更加清晰、易于维护和扩展的代码。
  2. 提高代码复用性:设计模式提供了可重用的解决方案,使得开发人员可以在不同的项目和场景中使用这些方案来解决相似的问题。
  3. 更好的团队协作:设计模式提供了一种共同的语言和标准,使得团队成员可以更好地相互沟通和理解。
  4. 更快的开发速度:使用设计模式可以加速软件开发过程,因为它们提供了可重用的解决方案,使得开发人员可以更快地实现系统功能。

总之,学习设计模式可以帮助软件开发人员更加高效地工作,提高软件系统的质量和可维护性。下面就详细梳理下23种设计模式。

二.设计模式的6大设计原则

设计模式的6大设计原则,也被称为SOLID原则,它们是:

1. 单一职责原则(Single Responsibility Principle,SRP):

一个类应该只有一个引起它变化的原因。简单来说,就是一个类应该只有一种职责,不应该承担太多的职责,避免代码耦合性过高。

2. 开放封闭原则(Open-Closed Principle,OCP):

一个软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。也就是说,在不修改原有代码的情况下,可以通过扩展来增加功能。

3. 里氏替换原则(Liskov Substitution Principle,LSP):

所有引用基类对象的地方,都可以用其子类对象替换,而不影响程序的正确性。也就是说,子类对象可以在程序中替换父类对象,而程序的行为不会发生变化。

4. 接口隔离原则(Interface Segregation Principle,ISP):

客户端不应该依赖它不需要的接口。简单来说,就是要将一个庞大的接口拆分成多个小的、专门的接口,以便于客户端只需知道它需要使用的方法。

5. 依赖倒置原则(Dependency Inversion Principle,DIP):

高层模块不应该依赖底层模块,二者都应该依赖抽象接口;抽象接口不应该依赖具体实现,具体实现应该依赖抽象接口。简单来说,就是要面向接口编程,而不是面向实现编程。

6. 迪米特法则(Law of Demeter,LoD):

一个对象应该对其他对象保持最少的了解。简单来说,就是一个对象应该只与它直接的朋友进行交流,不与陌生人说话。这可以减少对象之间的耦合,提高代码的复用性和可维护性。

三.设计模式

可以分为三类:

1. 创建型模式(Creational Patterns):

用于创建对象的模式,这些模式将对象的创建和使用分离开来,从而提高了系统的灵活性和可扩展性。工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式属于创建型模式。

2. 结构型模式(Structural Patterns):

用于描述如何将类或对象组合成更大的结构,从而构成更为复杂的系统。这些模式关注对象的组合方式,以及类和对象之间的关系。适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式和代理模式属于结构型模式。

3. 行为型模式(Behavioral Patterns):

用于描述对象之间的通信和协作,以及类和对象之间的职责分配。这些模式关注对象之间的交互方式,以及如何实现对象的行为。模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式和访问者模式属于行为型模式。

以下是23种常见的设计模式:

1. 工厂方法模式(Factory Method Pattern)

定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

image.png

2. 抽象工厂模式(Abstract Factory Pattern)

定义:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

image.png

3. 单例模式(Singleton Pattern)

定义:确保一个类只有一个实例,并提供全局访问点。

image.png

4. 建造者模式(Builder Pattern)

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

image.png

5. 原型模式(Prototype Pattern)

定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

image.png

6. 适配器模式(Adapter Pattern)

定义:将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

image.png

7. 桥接模式(Bridge Pattern)

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

image.png

8. 组合模式(Composite Pattern)

定义:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

image.png

9. 装饰者模式(Decorator Pattern)

定义:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更加灵活。

image.png

10. 外观模式(Facade Pattern)

定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高级接口,这个接口使得这一子系统更加容易使用。

image.png

11. 享元模式(Flyweight Pattern)

定义:运用共享技术有效地支持大量细粒度的对象。

image.png

12. 代理模式(Proxy Pattern)

定义:为其他对象提供一种代理以控制对这个对象的访问。

image.png

13. 模板方法模式(Template Method Pattern)

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

image.png

14. 命令模式(Command Pattern)

定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

image.png

15. 迭代器模式(Iterator Pattern)

定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

image.png

16. 观察者模式(Observer Pattern)

定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。

image.png

17. 中介者模式(Mediator Pattern)

定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

image.png

18. 备忘录模式(Memento Pattern)

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

image.png

19. 解释器模式(Interpreter Pattern)

定义:给定一个语言,定义它的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

image.png

20. 状态模式(State Pattern)

定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

image.png

21. 策略模式(Strategy Pattern)

定义:定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。本模式使得算法可独立于使用它的客户而变化。
image.png

22. 职责链模式(Chain of Responsibility Pattern)

定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

image.png

23. 访问者模式(Visitor Pattern)

定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的前提下定义作用于这些元素的新操作。

image.png

以上是23种设计模式的介绍,在项目中还需要多去实践才能灵活贯通。

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYjKMnI8' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片