策略模式 Java

来源:互联网 发布:苹果7为什么4g网络很慢 编辑:程序博客网 时间:2024/06/05 13:34

作用: 策略模式定义了算法族,分别封装起来,让算法和对象分开来,使得算法可以独立于使用它的客户而变化

方法:
1、通常将主类中会随对象不同而变化的算法(方法)抽离出来,建立一组新的接口类,并作为主类的成员,以便实现算法的多态性
2、针对算法变化分别设计接口类,例如鸭子的叫声(QuackBehavior)会随不同种类而有所区别(嘎嘎、吱吱、不叫),每种叫声分别定义quack()方法,并作为一个叫声类实现QuackBehavior;
3、在鸭子的具体实现类(例如灰鸭),对叫声、能否飞进行实现,如:QuackBehavior quackBehavior = new Quack();

4、在主类中声明setQuackBehavior方法,即可在运行时动态修改其叫声类型

具体方法可参看下述代码:

//定义主类,并将变化方法独立抽离成接口类
public abstract class Duck {  
    FlyBehavior flyBehavior;  
    QuackBehavior quackBehavior;  
      
    public Duck(){}  
    public void setQuackBehavior(QuackBehavior quackBehavior) {  
    }  
    public void performQuack() {  
//通过调用成员quack的quack()方法,实现叫声算法的封装
        quackBehavior.quack();  
    }
}

//将能否飞与叫声定义成接口类
public interface FlyBehavior {  
    public void fly(); 

public interface QuackBehavior {  
    public void quack();  
}

//实现叫声接口类,并定义可能的叫声算法 
public class MuteQuack implements QuackBehavior {  
    @Override  
    public void quack() {  
        System.out.println("<<Silence>>");  
    }  
}
 

//对于具体的鸭子类型,在其构造器中实现其叫声及飞行
public class MallardDuck extends Duck {
    public MallardDuck() {  
        quackBehavior = new Quack();  
        flyBehavior = new FlyWithWings();  
    }
}

 

具体过程可参看:http://blog.csdn.net/yan465942872/article/details/6300696

0 0
原创粉丝点击