1. 设计模式的概念

  • 是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。
  • 目的就是确定通用解决方案、确立通用术语、让代码易修改和维护。
  1. 设计模式不是一成不变的,而是在不断发展中。
  2. 设计模式不是软件行业独有的,事实上,有很多行业有自己的设计模式。

2.设计模式的优点

  1. 增加解决问题的能力
  2. 不用重复发明轮子
  3. 便于查看高级框架的源码

一般高级框架中,都会广泛的使用设计模式. 所以 了解和学习设计模式,是阅读高级框架源码的前提条件.

3. 设计模式的设计原则

设计模式的简介

SOLDIA原则:

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

一个类或对象最好只负责一个功能领域的相应职责。

在程序设计中如果发现某个类承担着多种义务,可以进行拆分,若多个职责总同时发生改变则可以将它们封装到一个类中。

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

一个软件实体(模块、多个类组成的局部结构、独立的类)应该对扩展开放,对修改关闭

  1. 程序设计要保证平滑性的扩展性,尽量避免因为新增同类功能而修改已有实现,这样可以少产出回归问题。
  2. 抽象化是开闭原则的关键,可以通过它们定义系统的抽象层,再通过具体类进行扩展。需要修改系统行为,无须对抽象层动手,只需增加新的具体类来实现新的业务功能即可。

3.2 里氏代替原则(Liskov Substitution Principle, LSP):

里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类(父类)可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类(子类)可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

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

这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

  1. 也就是说,在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。这一原则是降低产品代码之间的耦合。
  2. 在程序中尽量使用抽象层进行编程,而将具体类写在配置文件中,这样一来,如果系统行为发生变化,只需要对抽象层进行扩展,并修改配置文件,而无须修改原有系统的源代码,在不修改的情况下来扩展系统的功能,满足开闭原则的要求。
  3. 在实现依赖倒置原则时,则需要针对抽象层编程,而将具体类的对象通过依赖注入( DI)的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。构造注入是指通过构造函数来传入具体类的对象,设值注入是指通过Setter方法来传入具体类的对象,而接口注入是指通过在接口中声明的业务方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象。

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

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。
它还有另外一个意思是:降低类之间的耦合度。
由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

3.5 合成复用原则(Aggregate Reuse Principle, ARP):

尽量使用对象组合,而不是继承来达到复用的目的。

新对象通过委派调用已有对象的方法达到复用功能的目的。简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承。

3.6 迪米特法则/最小知识原则(LeastKnowledge Principle, LKP)

一个软件实体应当尽可能少地与其他实体发生相互作用。这样系统模块功能相对独立,当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易,降低系统的耦合度。

4. 设计模式的分类

根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。当然,我们还会讨论另一类设计模式:J2EE 设计模式。

设计模式的简介
设计模式详解:

此表格 将不定期更新

设计模式 链接
工厂模式 >>点击查看(此链接为百度)<<

5. 本文单词解读

单词 音标 翻译
Responsibility /rɪˌspɒnsəˈbɪləti/ n. 责任,职责;义务
Principle /ˈprɪnsəpl/ n. 原理,原则;
Substitution /ˌsʌbstɪˈtjuːʃn/ n. 代替;
Dependency /dɪˈpendənsi/ n. 属国;从属;从属物
Inversion /ɪnˈvɜːʃn/ n. 倒置;反向;倒转
Segregation /ˌseɡrɪˈɡeɪʃn/ n. 隔离,分离;种族隔离
Aggregate /ˈæɡrɪɡət/ n. 合计;集合体;
Reuse /ˌriːˈjuːs/ n. 再次使用;重复使用

相关文章:

猜你喜欢
  • 2021-07-18
  • 2021-12-03
  • 2021-06-17
  • 2021-08-13
  • 2021-10-15
相关资源
相似解决方案