结构模式算法
行为模式数据库
为何可重用的设计模式?编程
一个设计......
...能够灵活地改变(可重用性)
...在修复旧问题时尽可能减小引入新问题(可维护性)
...容许在初次交付以后交付更多功能(可扩展性)。设计模式
设计模式:软件设计中给定上下文中常见问题的通用,可重用解决方案。
OO设计模式典型地显示类或对象之间的关系和交互,而不指定涉及的最终应用程序类或对象。 除了类自己,设计模式更强调多个类/对象之间的关系和交互过程---比接口/类复用的粒度更大数据结构
设计模式分类并发
创造性模式框架
结构模式学习
行为模式测试
适配器模式(delegation)设计
适配器模式
意图:将类的接口转换为客户指望得到的另外一个接口。将某个类/接口转换为客户指望的其余形式
对象:将旧组件重用到新系统(也称为“包装器”)
装饰器模式(subtyping and delegation)
使用装饰器模式的例子
假设你想要一个堆栈数据结构的各类扩展......
和任意可组合的扩展名:
装饰器
问题:您须要对单个对象进行任意或动态组合的扩展。为对象增长不一样侧面的特性
解决方案:实现通用接口做为要扩展的对象,添加功能,但将主要职责委托给基础对象。 对每个特性构造子类,经过委派机制增长到对象上
后果:
装饰者同时使用子类型和委派
装饰与继承
装饰者在运行时组成功能
装饰者由多个协做对象组成
能够混合搭配多重装饰
外观模式
问题:客户端社区的一部分须要一个简化的界面来实现复杂子系统的总体功能。
即客户端须要经过一个简化的接口来访问复杂系统内的功能
意图提供一个统一的接口来取代一系列小接口调用,至关于对复杂系统作了一个封装,简化客户端使用
这减小了成功利用子系统所需的学习曲线。便于客户端学习使用,解耦
它还促进了子系统与潜在的许多客户的解耦。
外观模式示例
假设咱们有一组具备接口的应用程序来使用MySql / Oracle数据库并生成不一样类型的报告,如HTML报告,PDF报告等。
因此咱们将有不一样的接口集合来处理不一样类型的数据库。
如今,客户端应用程序可使用这些接口来获取所需的数据库链接并生成报告。
可是,当复杂性增长或界面行为名称混淆时,客户端应用程序将难以管理它。
因此咱们能够在这里应用Facade模式,并在现有接口的顶部提供一个包装接口来帮助客户端应用程序。
策略模式
问题:针对特定任务存在不一样的算法,但客户端能够根据动态上下文在运行时切换算法。
示例:对客户列表进行排序(冒泡排序,合并排序,快速排序)
解决方案:为算法建立一个接口,并为算法的每一个变体实现一个类。
优势:
模板方法
问题:多个客户共享相同的算法,但具体细节不一样,即算法由可定制的部分和不变的部分组成。 常见的步骤不该该在子类中重复,但须要从新使用。
例子:
解:
模板方法模式
模板方法模式使用继承+可重写方法来改变算法的一部分使用继承和重写实现模板模式
模板方法普遍用于框架
迭代器模式
问题:客户须要统一策略来访问容器中的全部元素,而与容器类型无关
解决方案:迭代的策略模式
后果:
模式结构
结构模式
行为模式