1.设计模式的概念
设计模式是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。
2.学习设计模式的准备
高内聚与低耦合
耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。内聚性又称块内联系。指一个模块内部各个元素彼此结合的紧密程度的度量。
高内聚与低耦合是软件体系结构的一个编码总原则,也是设计模式的原则,可以说设计模式就是需要做到高内聚或低耦合,尤其是后者。从而引出面向对象设计的六大原则,也是设计模式的六大原则。
面向对象设计的六大原则
单一职责原则SRP:一个类应该仅有一个引起他变化的原因。
开放-关闭原则OCP:一个类应该对扩展开放,对修改关闭。
里氏替换原则LSP:子类可以扩展父类的功能,但不能改变父类原有的功能。
依赖倒置原则DIP:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
接口隔离原则ISP:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
最小知识原则LKP:一个对象应该对其他对象保持最少的了解。
在这里,我就不详细介绍介绍六大原则了。除此之外,我们还应该知道——面向接口编程;优先使用组合而不是继承。
设计模式的分类
GoF中提到了23种设计模式。
创新型:抽象了对象实例化的过程,用来帮助创建对象的实例。
结构型:描述如何组合类和对象以获得更大的结构。
行为型:描述算法和对象间职责的分配。
3.进入设计模式的学习
学习模式的方法
设计模式是为一些特定的场景问题而得出的优秀解决方案。在学习一种设计模式之前应该了解它的应用场景,用普通的方法会怎么写,然后再学习这种设计模式的具体解决方案,最后再由浅及深地去理解一种设计模式。另外,还可以总结与归纳各种设计模式之间的联系与区别。
比如说,工厂模式的应用场景是一个类希望由它的子类来创建所需的对象。客户端不需要知道具体的实现,只知道创建某个接口的对象。
设计模式与框架关系
设计模式研究的是针对单一问题的设计思路和解决方法,一个模式可应用于不同的框架和被不同的语言所实现;而框架则是一个应用的体系结构,是一种或多种设计模式和代码的混合体虽然它们有所不同,但却共同致力于使人们的设计可以被重用,在思想上存在着统一性的特点,因而设计模式的思想可以在框架设计中进行应用。
在学习设计模式之前,我先学习了Spring框架,我们知道Spring的两大特性:IoC与AOP。我们可以认为Spring使用了设计模式来实现了这样的特性。
比如说IoC是工厂模式的升华,控制反转的思想是应用程序依赖容器创建并注入他所需要的外部资源。比如说要在A里面使用C,以往是A直接去创建C的对象,这种情况被称为是正向的。然而A类不再主动去获取C,而是被动等待,等待IoC容器获取一个C的实例,然后反向注入到A类。工厂模式很好地体现了“依赖倒置原则”,依赖抽象而不是实现类。二者都是主动变被动。
JAVA中的设计模式
Java语言具有强大的类库,提供了许多类与方法给我们去实现各种设计模式。
比如,使用Java中的定义在Object类的clone方法去实现原型模式的克隆功能。需要克隆功能的类,只需要实现java.lang.Cloneable接口,这是一个标示接口,没有需要实现的方法。
本文主要是个人的一点心得,并没有详细地去解释各种设计模式。