优点:
1、可以动态的改变对象的行为
缺点:
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类
2、策略模式将造成产生很多策略类
将变化的东西定义成一个接口(针对接口编程),有多少中策略就有多少个实现类(这也是上面缺点2的原因),然后在需要用到该变化东西的类里面定义该成员变量即可引入(组合),自行使用相应的实现策略。
下面举例说明
每种动物都有不同的叫声,动物的叫声是变化的,所以可以使用策略模式
首先定义策略接口(BleatBehavior)
//叫声类
public interface BleatBehavior{
public void bleat();
}
狗叫和猫叫分别实现BleatBehavior
//狗叫类
public class BarkBehavior implements BleatBehavior{
public void bleat(){
System.out.println("汪汪");
}
}
//猫叫类
public class MiaowBehavior implements BleatBehavior{
public void bleat(){
System.out.println("喵喵");
}
}
//动物类
public class Animal {
public BleatBehavior bleatBehavior;
//动态设置动物怎么叫
public void setBleatBehavior(BleatBehavior bleatBehavior) {
this.bleatBehavior = bleatBehavior;
}
public void performBark() {
bleatBehavior.bleat();
}
}
//狗类
public class Dog extends Animal{
}
//测试类
public class Test {
public static void main(String[] args) {
Animal dog = new Dog();
dog.setBleatBehavior(new BarkBehavior());
dog.performBark();
}
}
转载自原文链接, 如需删除请联系管理员。
原文链接:java设计模式之-策略模式,转载请注明来源!