设计模式之策略模式与观察者模式
Jul 19, 2015
在读设计模式, 做了简单的笔记, 并没有深入设计模式总结.
#interface
首先, 温习一下Java中的接口技术(interface), 接口主要用于描述类具体有什么功能, 但并不给出每个功能的具体实现(类似与iOS编程中的协议的概念)
|
|
如果类遵从特定的接口, 那就必须实现具体的业务逻辑(
类似于iOS编程中, 作为delegate就必须具体实现协议定义)
- 接口所有方法自动属于
public - 接口不能含有实例域, 但可以包含
常量, 不能在接口中实现方法(可以看做没有实例域的抽象类) - 实现接口时需要声明为
public - 不能用
new实例化一个接口, 但能声明接口的变量 - 一个类只能使用一个抽象类(Java不支持多继承), 却可以使用
多个接口
|
|
#设计原则
设计告诉我们如何组织类和对象以解决某种问题
- 找出应用需要变化之处, 把它们独立出来, 不要和那些不需要变化的代码混在一起
- 针对接口编程 而不是针对实现编程
- 多用组合, 少用继承
#策略模式(Strategy Pattern)
策略模式定义了算法族, 分别封装起来, 让它们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户
- 策略模式的核心是
动态绑定 - 策略模式将不断变化的部分封装为一个
接口, 可以不同变化进行接口的具体实现 - 在使用到变化的类中增加一个声明一个接口的变量(注意是接口, 不是接口的一些具体实现, 这里用到动态绑定)
|
|
通过抽象类, 得到一个真正的子类
|
|
#观察者概念
主题 + 观察者 = 观察者模式
主题对象管理某些数据, 当主题内的数据改变, 就会通知观察者, 观察者已经向主题注册, 这样观察者在每次主题数据改变时都能收到更新
观察者模式定义了对象之间的一对多依赖(一个主题, 多个观察者), 当一个对象改变状态, 他的所有依赖者都会收到通知并更新
#观察者模式(Observer Pattern)
首先定义主题, 观察者, 观察者抽象行为接口
|
|
- 定义实现主题接口的类(作为主题)
- 定义实现观察者接口的类(作为观察者)
|
|
测试类
|
|
Java本身自带一套观察者模式, 其中Observable相当于Subject, 不过Observable是一个
类, 而不是接口, Observer是一个观察者接口
分析认为: iOS中按钮的点击事件使用了观察者模式, 按钮被点击后, 通知所有观察者, 合适的观察者对按钮点击事件进行处理
#参考连接
- Java中的抽象函数与C++中的虚函数
Head First Design Pattern