文章目录
简要介绍
策略模式,指的是通过一个接口内所定义了众多抽象方法,然后通过调用接口来具体实现不同的方法。
1.策略模式角色
封装角色:可以理解为桥接Client端和Server端,方便对于某一个方法的准确调用。
抽象策略角色:定义了一系列方法的interface。
具体策略角色:继承interface并且将方法具体化。
2.策略模式的优缺点
优点:
(1)可以通过修改策略内部具体实现的方法来快速改正内容。
(2)增加策略的时候只需要在接口内部声明,然后在封装角色的时候写清楚,最后由client调用即可。
缺点:
(1)当策略有很多的时候策略类就会有很多,看起来很乱。
3.应用场景
(1)当要实现的各功能大体相同,局部实现不同的时候可以使用。
(2)当要通过判断不同条件去实现不同的方法的时候可以使用。
4.策略模式注意点
- 分析项目中变化部分与不变的部分
- 多用组合少用继承;用行为类组合,而不是行为的继承。更加具有弹性
- 设计模式没有相应的库直接使用,有一些库或者是框架本身就是用某种设计模式设计的
5.代码举例
public interface Animal {
/**
* 策略角色
*/
public abstract void eat();
}
public class Dog implements Animal {
/**
* 策略角色的实现方法
*/
@Override
public void eat() {
System.out.println("Dog is eating");
}
}
public class Cat implements Animal {
/**
* 策略角色实现方法
*/
@Override
public void eat() {
System.out.println("Cat is eating");
}
}
class Common{
/**
* 封装角色
*/
private Animal animal;
public Common(Animal animal) {
this.animal = animal;
}
public void eat(){
animal.eat();
}
}
class M{
/**
*
* @param args
*/
public static void main(String[] args) {
Common common = new Common(new Dog());
common.eat();
}
}
总结
策略模式:分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里设定行为对象。
原则:分离变化部分,封装接口,基于接口编程各种功能。这种模式让行为算法的变化独立于算法的使用者。