java设计模式——策略模式

定义

策略模式——策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

良好的Object Oriented设计必须具备可复用可扩充可维护三个特性。

设计原则

针对接口编程,不针对实现编程

针对接口编程的真正意思是“针对超类型编程”,关键就在多态,利用多态,程序可以针对超类型编程,执行时会根据实际情况执行到真正的行为,不会被绑死在超类型的行为上。“针对超类型编程”可以更明确的说成是“变量的声明应该是超类型(可以使抽象类,也可是接口),只要具体实现此超类型的类所产生的对象,都可以指定给这个变量。”

多用组合,少用继承

组合即将两个类结合起来使用(一个类中包含另一类的实例),利用组合建立的系统具有很大的弹性,不仅可以将算法封装成类,更可以“在运行时动态改变行为”,只要组合的行为对象符合正确的接口标准。

例:

package duck;
public abstract class Duck {
    //飞行接口对象
    FlyBehavior flyBehavior;
    //叫声接口对象
    QuackBehavior quackBehavior;

    public Duck(){
    }

    public void setFlyBehavior(FlyBehavior fb){
        this.flyBehavior=fb;
    }

    public void setQuackBehavior(QuackBehavior qb){
        this.quackBehavior=qb;
    }

    public abstract void display();

    public void performFly(){
        flyBehavior.fly();
    }

    public void performQuack(){
        quackBehavior.quack();
    }

    public void swim(){
        System.out.println("All duck float,even decoys");
    }

}
package duck;
public interface FlyBehavior {
    public void fly();
}

public class FlyNoWay implements FlyBehavior{
    public void fly(){
        System.out.println("I can't fly");
    }

}
package duck;
public interface QuackBehavior{
    public void quack();
}

public class Quack implements QuackBehavior{
    public void quack(){
        System.out.println("quack");
    }
}
package duck;
public class MallardDuck extends Duck{
    public MallardDuck(){
        quackBehavior=new Quack();
        flyBehavior=new FlyWithWings();
    }
    public void display(){
        System.out.println("I'm a real mallard duck");
    }
}

你可能感兴趣的:(设计模式)