引言
之前的议题都是围绕着封装转;已经封装了创建对象,方法调用,复杂接口、等等
现在要深入封装算法块,可以让子类在任何时候都可以将自己挂在进算法里。
模版方法模式类图
- 使用模版方法时,由超类控制流程,并抽象子类必须实现的方法,提供钩子函数,供子类选择实现与否,参与流程控制。
- 超类往往是抽象类
- 使用模版方法时,由超类控制流程,提供接口,由外部实现接口,在流程中使用到接口的方法。
设计原则
- 好莱坞原则:别调我们,我们会调你。
原则解释
底层组件挂钩在高层组件下,由高层组件负责调用底层组件,高层组件决定什么时候和怎么使用这些组件
模版方法中,子类没有调用父类的方法,由父类决定什么时候调用子类方法。
其他设计模式中要到这个原则的有?
- 外观模式
- 观察者模式
- 命令模式
jdk中的InputStream的read()方法 Arrays.sort的方法
脑动力
1
- 如果使用了继承,那么数组的元素必须要实现comparable接口,限制了数组元素的类型
- 由实现着决定comparable接口的逻辑,不依赖于具体实现,依赖抽象
2
工厂方法模式+
设计箱内的工具
设计基础
- 封装
- 继承
- 多态
- 抽象
设计原则
- 多用组合,少用继承
- 封装变化
- 为交互对象之间的松耦合设计而努力
- 最少知识原则
- 好莱坞原则
- 针对接口编程,不针对具体编程
- 开闭原则
- 依赖抽象,不依赖具体
设计模式
- 策略模式:封装一系列的算法,让算法的实现独立于使用,可以达到动态切换算法的功能
- 观察者模式:定义了一对多的对象关系,一个对象的状态变化会通知依赖他的对象,并自动更新
- 装饰着模式:扩展类的另一种选择。类会变多。可以在运行时,动态的扩展类
- 简单工厂模式:封装创建对象的代码,提高复用率和可维护性
- 工厂方法模式::定义了一个接口,用于创建一种产品,使得对象的创建延迟到子类
- 抽象工厂模式:定义了一个接口,用于创建相关或依赖对象的家族,不需要指定具体类(面对接口编程带来的优势)。
- 命令模式:把请求封装成一个对象,使得请求和执行隔离开来。可以使用不同的请求来参数化其他对象。命令模式也支持撤销
- 单例模式:提供全局唯一对象,并提供访问方法
- 适配器模式:有类适配器(java不支持,需要多重继承)和对象适配器。把一个接口转换成客户端希望的接口
- 外观模式:封装子系统的复杂性,提供高层接口,使得调用子系统更加简单。
- 模版方法模式:定义了程序算法执行的骨架,由子类决定算法的具体细节步骤。模版方法模式,使得子类在不修改算法情况下,重新定义算法中的某些步骤