前言:
当下会Java的人越来越多,但是一直徘徊在语言层次的程序员不在少数,真正掌握Java中接口或抽象类的应用不是很多,大家经常以那些技术只适合大型项目为由,避开或忽略它们,实际中,Java的接口或抽象类是真正体现Java思想的核心所在,这些你都将设计模式里领略到它们变幻无穷的魔力。看过很多简历上写着深刻理解面向对象,但是连基本的设计模式都描述不出来,或是说出来的也只是听说过,怎么应用大多数是说不上来的。如果说是初学者真没必要学,内力不足,没办法领略其中奥妙,如果是入行都5以上了
那最好还是应该会使用一些基本的设计模式,不然整天喊着高内聚、低耦合及可维护性,可扩展性,重 用性,灵活性等如何实现呢,大厂面试官问你在实际项目中使用过什么设计模式,怎样使用的,解决了什么问题,又怎么回答呢?
- 设计模式在软件中的地位
面向对象(oo)=>功能模块[设计模式+(算法+数据结构)]=>框架[使用到多种设计模式]=>架构 [服务器集群]
设计模式包含了面向对象的精髓,“懂了设计模式,你就懂了面向对象分析和设计 (OOA/D)的精要”
目录
一、设计模式的目的
设计模式要干的事情就是解耦。创建型模式是将创建和使用代码解耦,结构型模式是将不同功能代码解耦,行为型模式是将不同的行为代码解耦。
官方解释:编写高内聚、低耦合及可维护性,可扩展性,重 用性,灵活性高的代码;
对程序员而言:深入理解面向对象;深入理解开源代码;编写高内聚、低耦合及可维护性,可扩展性,重 用性,灵活性高的代码;编写属于自己的框架;帮助自己早日成为技术大牛。。。。。。
二、设计模式七大原则
设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础
1、单一职责原则(通俗讲:一个类只负责一项职责,一个方法只负责一个功能或行为)
2、 接口隔离原则(类实现的接口不应该有无用的方法,如果有接口进行拆分)
3 、依赖倒转(倒置)原则(实质面向接口编程,高层模块不应该依赖低层模块,而是依赖抽象(比如控制层不是调用服务层的实现类而是调用服务层的接口))
4 、里氏替换原则(继承,所有引用基类的地方必须能透明地使用其子类的对象,在适当的情况下,可以通过聚合,组合,依赖 来解决问题。)
5 、开闭原则(通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化)
6 、迪米特法则(最少知道原则,一个对象应该对其他对象保持最少的了解 )
7、合成复用原则(尽量使用合成/聚合的方式,而不是使用继承)
三、设计模式的表示方法-UML类图
3.1、类图—依赖关系(Dependence)
public class Programmer{
public void work(Computer computer) {
}
}
3.2、类图—泛化关系(generalization)
3.3、类图—实现关系(Implementation)
3.4、类图—关联关系(Association)
3.5、类图—聚合关系(Aggregation)
聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。聚 合关系是关联关系的特例,所以他具有关联的导航性与多重性。
用 Java 代码表示大雁是群居动物,每只大雁都属于一个雁群,一个雁群可以有多只大雁:
public class WildGooseAggregate {
private List<WildGoose> wideGooses;
}
3.6、类图—组合关系(Composition)
组合关系:也是整体与部分的关系,但是整体与部分不可以分开。
四、设计模式类型
1) 创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。
2) 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享 元模式、代理模式。
3) 行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者 模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模 式、策略模式、职责链模式(责任链模式)。
五、掌握设计模式的层次