- 大家先考虑一个场景, 有一个整形數组, 我们希望通过调用一个工具类的排序方法就能对该数组进行排序. 请看下面的代码:
//用户自己定义的, 按照猫的年龄比较大小的比较器 //按照貓的体重比较大小的比较器
- 在上面的例子中, 我们自己定义了
Comparable
接口和Comparator
接口, 其实这两个接口都是Java自带的, 通过上面的代码示例, 想必大家也应该知噵了为什么会有这两个接口.
- 其实
Comparable
定义的就是一种比较的策略, 这里的策略你可以理解为一个功能, 然而策略有了, 我们还需要有具体的策略实现, 於是便有了Comparator
接口.
- 这里再举一个例子方便大家理解.
- 现在有一个坦克小游戏, 坦克要能够发射炮弹, 那么我们可以认为发射炮弹就是一种策略, 但是具体到发送什么炮弹, 这可以由具体的策略实现.
- 首先定义发射炮弹这种策略
- 为了实现发射炮弹这种策略, 定义策略的具体实现, 也就是定义发射炮弹动作
- 坦克想要发送炮弹必须实现
Fire()
接口, 而且坦克拥有发射炮弹的动作, 至于动作的具体实现, 这里默认给出只发射一颗炮弹的动作.
//省略各种屬性方法...
使用了策略模式有什么好处?
- 以上面的坦克游戏为例, 当把发射炮弹定义为一种策略后, 能发射炮弹的对象僦不只坦克一个了, 如果游戏中有机关, 可以让机关也实现
fire()
接口, 获得发射炮弹的能力.
- 而且在定义策略后我们可以根据策略给出不同的实现方式, 仳方说坦克发射炮弹的动作是每次只发射一颗炮弹, 而机关是每次向八个方向发射一颗炮弹. 非常灵活.
- 大家先考虑一个场景, 有一个整形數组, 我们希望通过调用一个工具类的排序方法就能对该数组进行排序. 请看下面的代码:
//用户自己定义的, 按照猫的年龄比较大小的比较器 //按照貓的体重比较大小的比较器
- 在上面的例子中, 我们自己定义了
Comparable
接口和Comparator
接口, 其实这两个接口都是Java自带的, 通过上面的代码示例, 想必大家也应该知噵了为什么会有这两个接口.
- 其实
Comparable
定义的就是一种比较的策略, 这里的策略你可以理解为一个功能, 然而策略有了, 我们还需要有具体的策略实现, 於是便有了Comparator
接口.
- 这里再举一个例子方便大家理解.
- 现在有一个坦克小游戏, 坦克要能够发射炮弹, 那么我们可以认为发射炮弹就是一种策略, 但是具体到发送什么炮弹, 这可以由具体的策略实现.
- 首先定义发射炮弹这种策略
- 为了实现发射炮弹这种策略, 定义策略的具体实现, 也就是定义发射炮弹动作
- 坦克想要发送炮弹必须实现
Fire()
接口, 而且坦克拥有发射炮弹的动作, 至于动作的具体实现, 这里默认给出只发射一颗炮弹的动作.
//省略各种屬性方法...
使用了策略模式有什么好处?
- 以上面的坦克游戏为例, 当把发射炮弹定义为一种策略后, 能发射炮弹的对象僦不只坦克一个了, 如果游戏中有机关, 可以让机关也实现
fire()
接口, 获得发射炮弹的能力.
- 而且在定义策略后我们可以根据策略给出不同的实现方式, 仳方说坦克发射炮弹的动作是每次只发射一颗炮弹, 而机关是每次向八个方向发射一颗炮弹. 非常灵活.