设计模式的分类及其六大设计原则

什么是设计模式:

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结


设计模式的分类

GoF设计模式有23个,它们各具特色,每个模式都为某一个可重复的设计问题提供了一套解决方案。根据它们的用途,设计模式可分为:

 1.创建型(Creational)

创建型模式(5):提供创建对象的机制,提升已有代码的灵活性和可复用性

 √  常用:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式.

 √  不常用: 原型模式

 

     2.结构型(Structural)

结构型模式(7):介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效

 √ 常用:代理模式、桥接模式、装饰者模式、适配器模式.

 √ 不常用:外观模式、组合模式、享元模式。

 

     3.行为型(Behavioral)

行为模式(11):负责对象间的高效沟通和职责传递委派

 

 √ 常用:观察者模式、模板模式、策略模式、责任链模式、迭代器模式、状态模式

 √ 不常用:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。


六大设计原则:

1、单一职责原则(Single Responsibitity Principle)

2、开放封闭原则(Open Close Principle)

3、里氏替换原则(Liskov Substitution Principle)

4、接口分离原则(Interface Segregation Principle)

5、依赖倒置原则(Dependence Inversion Principle)

6、迪米特法则(Least Knowledge Principle)


1.单一职责原则

 官方定义:   一个类或者模块只负责完成一个职责(或者功能)。

 通俗解释:   一个类只负责完成一个职责或者功能。也就是说在类的设计中 我们不要设计大而全的                      类,而是要设计粒度小、功能单一的类.

 

场景示例:

在一个社交媒体产品中,我们使用UserInfo去记录用户的信息,包括如下的属性.

如图所示        :

 

设计模式的分类及其六大设计原则_第1张图片

 


2.开闭原则

 官方定义:    在面向对象编程领域中,开闭原则规定软件中的对象、类、模块和函数对扩展应该是                      开放的,但对于修改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细                          节,以此确保软件系统开发和维护过程的可靠性。

 通俗解释:   对扩展开放,对修改关闭

优点:

     1. 新老逻辑解耦,需求发生改变不会影响老业务的逻辑

     2. 改动成本最小,只需要追加新逻辑,不需要改的老逻辑

     3. 提供代码的稳定性和可扩展性

场景示例

 

系统A与系统B之间进行数据传输使用的是5269版本的协议,一年以后对5269版本的协议进行了修正。

请同学们用UML类图描述出上面需求中存在的: 类与类 类与接口之间的关系

 

设计模式的分类及其六大设计原则_第2张图片

 

开闭原则是所有的设计模式的最核心目标,顶层设计思维:
1.抽象意识
2.封装意识
3.扩展的意思


3.里氏替换原则

 官方定义:    如果ST的子类型,对于S类型的任意对象,如果将他们看作是T类型的对象,则对                         象的行为也理应与期望的行为一致。

 通俗解释:   1.当我的一个方法的参数是一个接口类型时,这个方法可以接收所有实现过这个接口的                        实现类

                     2.在不了解派生类的情况下,仅通过接口或基类的方法,即可清楚的知道方法的行                             为,而不管哪种派生类的实现,都与接口或基类方法的期望行为一致。


 场景示例

在商城项目中,推出了三种促销方式:

    1.满减活动,两百以上打八折

    2.打折活动,全场九折

    3.返现活动,消费超1000,200.

请同学们设计一个结算接口及其实现类,该接口的结算方法能够对用户的最终消费金额进行一个计算.计算结果需要满足上面的多种促销方式.

 

设计模式的分类及其六大设计原则_第3张图片

 


4.接口隔离原则

 官方定义:    一个类对另一个类的依赖应该建立在最小的接口上

 通俗解释:   要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依                      赖它的类去调用。

 场景示例 

需求: 后台管理系统要实现删除用户的功能,希望用户系统提供一个删除用户的接口,应该如何设计这个接口 ?

请同学们用UML类图描述出上面需求中存在的: 类与类 类与接口之间的关系

 

设计模式的分类及其六大设计原则_第4张图片

  

遵循接口隔离原则的优势
1.将胖接口分解成多个粒度小的接口,可以提高系统的灵活性和可维护行
2.使用多个专门的接口,还能够体现出对象的层次。
3.能够减少项目工程中的冗余代码.


 5.依赖倒置原则

   官方定义:    是指在设计代码架构时,高层模块不应该依赖于底层模块,二者都应该依赖于抽                             象。抽象不应该依赖于细节,细节应该依赖于抽象

   通俗解释:   由于在软件设计中,细节具有多变性,而抽象层则相对稳定,因此以抽象为基础搭                          建起来的架构要比以细节为基础搭建起来的架构要稳定得多。

设计模式的分类及其六大设计原则_第5张图片

 

场景示例 

 假设我们现在要组装一台电脑,需要的配件有 cpu,硬盘,内存条。只有这些配置都有了,计算机才能正常的运行。cpu有很多选择,如IntelAMD等,硬盘可以选择希捷,西数等,内存条可以选择金士顿,海盗船等。

 

设计模式的分类及其六大设计原则_第6张图片

 

 

 依赖导致、依赖注入、控制反转这三者之间的区别与联系

设计模式的分类及其六大设计原则_第7张图片


 6.迪米特法则

  官方定义:    迪米特法则又叫最少知识原则(LKPLeast Knowledge Principle ),指的是一个                         类/模块对其他的类/模块有越少的了解越好。

   通俗解释:   不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必                          要的接口。

场景示例 

娱乐明星王冰冰由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如和粉丝的见面会,和媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则。

 

设计模式的分类及其六大设计原则_第8张图片

 


六大设计原则总结:

我们只需关注三个常用的原则即可

(1 ) 单一职责原则: 单一职责原则是类职责划分的重要参考依据,是保证代码”高内聚“的有效手段,是我们在进行面向对象设计时的主要指导原则。

(2 ) 开闭原则: 开闭原则是保证代码可扩展性的重要指导原则,是对代码扩展性的具体解读。很多设计模式诞生的初衷都是为了提高代码的扩展性,都是以满足开闭原则为设计目的的。

(3 ) 依赖倒置原则依赖倒置原则主要用来指导框架层面的设计。高层模块不依赖低层模块,它们共同依赖同一个抽象。

 

你可能感兴趣的:(设计模式,设计模式,java,开发语言)