文章目录
一、简介
设计模式是一种为了解决特定环境下特定问题的一种编程思想,也是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。
二、六大原则
1、单一职责原则
简而言之,就是每个类实现单一职责
2、里氏替换原则
基类出现的地方,子类及其衍生类也可以出现,注意,子类尽量不要重写和重载父类方法
3、依赖倒转原则
面向接口编程,依赖于抽象而不依赖于具体,不与具体实现类交互,而与其上层接口交互
4、接口隔离原则
每个接口中不存在子类用不到却必须实现的方法,如果不行,就要将接口拆分
5、迪米特法则(最少知道原则)
一个类对自己依赖的类知道的越少越好,将逻辑封装到方法内部,通过public提供给外部
6、合成复用原则
尽量使用合成/聚合的方式,而非继承
三、分类
1、创建型模式
在创建对象的同时隐藏创建逻辑的方式,不使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
包含:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式
2、结构型模式
关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
包括:适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式、代理模式
3、行为模式
关注对象间的通信
包括:责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、空对象模式、策略模式、模板模式、访问者模式
4、J2EE模式
关注表示层,面向切面
包括:MVC模式、业务代表模式、组合实体模式、数据访问对象模式、前端控制器模式、拦截过滤器模式、服务定位器模式、传输对象模式
四、聚合与继承
1、合成/聚合复用
优点:
由于合成或聚合可以将已有对象纳入到新对象中,使之成为新对象的一部分,因此新对象可以调用已有对象的功能。这样做的好处有
(1) 新对象存取成分对象的唯一方法是通过成分对象的接口。
(2) 这种复用是黑箱复用,因为成分对象的内部细节是新对象看不见的。
(3) 这种复用支持包装。
(4) 这种复用所需的依赖较少。
(5) 每一个新的类可以将焦点集中到一个任务上。
(6) 这种复用可以再运行时间内动态进行,新对象可以动态地引用与成分对象类型相同的对象。
缺点:
一般而言,如果一个角色得到了更多的责任,那么可以使用合成/聚合关系将新的责任委派到合适的对象。当然,这种复用也有缺点。最主要的缺点就是通过这种复用建造的系统会有较多的对象需要管理。
2、继承复用
继承复用通过扩展一个已有对象的实现来得到新的功能,基类明显的捕获共同的属性和方法,而子类通过增加新的属性和方法来扩展超类的实现。继承是类型的复用。
优点:
(1) 新的实现较为容易,因为超类的大部分功能可以通过继承关系自动进入子类。
(2) 修改或扩展继承而来的实现较为容易。
缺点:
(1) 继承复用破坏包装,因为继承将超类的实现细节暴露给了子类。因为超类的内部细节常常对子类是透明的,因此这种复用是透明的复用,又叫“白箱”复用。
(2) 如果超类的实现改变了,那么子类的实现也不得不发生改变。因此,当一个基类发生了改变时,这种改变会传导到一级又一级的子类,使得设计师不得不相应的改变这些子类,以适应超类的变化。
(3) 从超类继承而来的实现是静态的,不可能在运行时间内发生变化,因此没有足够的灵活性。