前言
设计模式每个开发者都会或多或少的接触过,使用过,设计模式的目的很简单,就是一些解决问题的方案,经过时间的检验,这种方案是最优的,这就形成了一套设计模式。很多的架构都是基于多种设计模式开发的,学习设计模式有利于我们更好的理解源码,提高学习水平。
我们最常听说的设计模式有23种,也有人说是24种,本系列文章默认为24种。设计模式很多,但是在真正的开发过程中,我们用到的也就是我们熟悉的几种,本系列文章就是挑选一部分常用的设计模式,在开发中熟练使用即可。下面会根据设计模式的分类进行讲解。
不管是什么设计模式,对于整个项目,最终都会归纳到一句话上:用抽象构建框架,用细节实现扩展
原则
设计模式遵从六大原则,知道即可。
1) 单一职责原则
每个类都只负责单一的功能,切不可太多,并且一个类应当尽量的把一个功能做到极致。
2)里氏替换原则
简单的理解为一个软件实体如果使用的是一个父类,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,软件里面,把父类都替换成它的子类,程序的行为没有变化。但是反过来的代换却不成立,一个软件实体如果使用的是一个子类的话,那么它不能适用于其父类。
3)接口隔离原则
也称接口最小化原则,强调的是一个接口拥有的行为应该尽可能的小。
比如,手机有很多功能,打电话发短信是最基本的功能,可能还有玩愤怒的小鸟游戏功能,因此设计顶级接口:
子类可以实现Mobile接口,但是比如非智能手机,可能玩不了愤怒的小鸟,这样实现接口的时候,这个方法就空着,这样接口Mobile就不是最小化原则,可以把playBird这样的方法放到实现类智能手机类中,智能手机单独有这个接口就行了,这就是最小化原则。
4)依赖倒置原则
这个原则描述的是高层模块不该依赖于低层模块,二者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。
5)迪米特原则
高内聚、低耦合
6)开-闭原则
对修改关闭,对扩展开放。
设计模式分类
根据模式是用来完成什么工作的,将设计模式分为创建型、结构型、行为型三种。三种类型的设计模式分别包含如下类型的设计模式:
创建型:单例模式、简单工厂模式、工厂模式、抽象工厂模式、建造者模式、原型模式;
结构型:代理模式、适配器模式、装饰器模式、桥接模式、组合模式、享元模式、外观模式;
行为型:观察者模式、模板方法模式、命令模式、状态模式、职责链模式、解释器模式、中介者模式、访问者模式、策略模式、备忘录模式、迭代器模式。
创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”;
结构型模式:用于描述如何将类与对象按某种布局组成更大的结构;
行为型模式:用于描述类或对象之间怎样相互协同共同完成单个对象无法单独完成的任务,以及怎样分配职责。
UML图
UML统一建模语言,以图形的方式展现转件的设计思路。在系统设计阶段,任务是完成数据库表的设计、主要类的设计、主要接口的设计、方法调用执行流程的设计,其中数据库表的设计我们称为物理建模(创建物理数据模型PDM),PDM设计需要使用PowerDesigner工具。其中主要类的设计、接口的设计、方法调用流程的设计需要使用UML图来表示。IBM的Rational Rose工具、StarUML、MS visio等工具都可以实现UML图。
下面介绍一下类图的表示,UML图中箭头多种多样,所代表的含义也是各不相同,在设计模式中,一般都会有类图表示设计模式,所以,复习一下类图几种箭头的含义。
-
继承(也叫泛化)
Java中泛化就是继承,子类继承父类,子接口继承父接口
-
实现
Person类实现了Workable接口
-
依赖
在A类的方法中, 使用B类作为方法的返回值类型,或者方法参数类型,或者局部变量类型, 称A类依赖B类。
-
关联
在A类中使用B类定义了成员变量, 称A类关联B类.
-
聚合
聚合是关联的一种, A类由若干B类组成,但是A类不能决定B类的生命周期, 称A类为聚合类。表现形式为B是A的成员变量,且B由外部传入。
-
组合
组合也是关联的一种, A类由若干B类组成,并且A类能决定B类的生命周期, 称A类为组合类。表现形式为B是A的成员变量,且B在A中直接构造。