一.设计模式基础
某种意义上来说,设计模式就是设计经验的总结~
设计模式不是简单的经验总结,更不是无中生有,它是经过实践反复检验、能解决关键技术难题、有广泛应用前景和能够显著提高软件质量的有效的经验总结。
每个模式都不是独立的,大量设计模式互相关联,形成一种生产性语言,即大量设计模式组合在一起,能够相互配合完成高质量的设计~(目前的设计模式还没有达到这种程度)
二.可修改性及其基本实现机制
在详细设计 阶段,设计模式可以用来提高质量,特别是提高可修改性,包含如下几个方面的质量:
- 狭义可修改性——对已有实现的修改
- 可扩展性——对新的实现的扩展
- 灵活性——对实现的动态配置
为了实现上述质量,需要能够将接口与实现分离,在java中的两种方式如下:
- 通过接口和实现该接口的类完成接口与实现的分离:
- 通过子类继承父类,将父类的接口和子类的实现相分离:
在很多设计模式中,大量地利用了上述两种实现与接口分离的方式~
三.策略模式
1.典型问题
大规模连锁店的例子:
2.设计分析
- 首先,可以把上下文和策略分割为不同的类,每个类实现不同的职责,上下文context类负责满足需求,它除了包含策略信息之外可能还有其他需求职责,而策略类Strategy只负责复杂策略的实现~
- 其次,上下文类和策略之间的关系使用组合比继承更合适
- 最后,各种策略则在具体策略类中提供,上下文拥有统一的策略接口~
使用的设计原则和解释:
- 减少耦合:减少策略的使用类和策略的实现类直接的耦合~
- 依赖倒置:策略的使用类依赖的是策略的接口,而非策略的实现类
3.解决方案
参与者与协作:参与者包括上下文、策略和具体策略,之间的协作包括context和strategy相互协作完成整个算法~
应用场景:策略模式有以下应用场景
应用注意点:应该注意以下几点
4.模式实例
四.抽象工厂模式
1.典型问题
需要依赖一个专门类——工厂的创建方法,工厂模式就是为对象的创建提供一个接口,将具体创建的实现封装在接口之下,这样具体创建的实现的改变就不会对client类产生影响~
2.设计分析
使用的设计原则和解释:
- 职责抽象:抽象对于对象创建的指针
- 接口的重用:提供对于对象创建的接口
3.解决方案
4.模式实例
五.单件模式
1.典型问题
在有些场景中,对于某个类,在内存中只希望有唯一一个对象存在,每次想要得到这个类的
2.设计分析
使用的设计原则和解释:
- 职责抽象:隐藏单间创建的实现
3.解决方案
4.模式实例
六.迭代器模式
1.典型问题
如果需求发生改变,新的需求要对这个集合进行快速查询,此时用链表就不太适合了,用三列集合就更加合适;当只希望挨个访问某个聚合结构,而并不希望知道到底是什么样的聚合结构,这个时候迭代器就会帮助我们~
2.设计分析
使用的设计原则和解释:
- 减少耦合:减少遍历的使用类和遍历的实现类直接的耦合
- 依赖倒置:遍历的使用类依赖的是策略的接口,而并非遍历的实现类
3.解决方案
4.模式实例
(这一章些许云里雾里,之后如果有时间出单独的设计模式专栏......)