设计模式之策略模式

来源:互联网 发布:淘宝网女士雪地靴 编辑:程序博客网 时间:2024/06/05 21:25

本文是本人在看Head First设计模式中的策略模式后根据个人的理解写下的,若有错误之处,请批评指出。

设计原则:
1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
2.针对接口编程,而不是针对实现编程
3.多用组合,少用继承

针对接口编程真正的意思是针对超类型编程


代码部分:
项目类图
项目类图

Duck类:

public abstract class Duck {    public FlyBehavior flyBehavior;    public QuackBehavior quackBehavior;    public void swim() {        System.out.println("I'm swimming");    }    public abstract void display();    public void performFly() {        flyBehavior.fly();    }    public void performQuack() {        quackBehavior.quack();    }    public void setFlyBehavior(FlyBehavior flyBehavior) {        this.flyBehavior = flyBehavior;    }    public void setQuackBehavior(QuackBehavior quackBehavior) {        this.quackBehavior = quackBehavior;    }}

ModelDuck类:

public class ModelDuck extends Duck{    public ModelDuck(){        flyBehavior = new FlyNoWay();        quackBehavior = new Quack();    }    public void display() {        // TODO Auto-generated method stub        System.out.println("I'm a Model duck!");    }}

FlyBehavior接口:

public interface FlyBehavior {    void fly();}

FlyNoWay类:

public class FlyNoWay implements FlyBehavior{    public void fly() {        // TODO Auto-generated method stub        System.out.println("I can't fly!");    }}

FlyWithRocket类:

public class FlyWithRocket implements FlyBehavior{    public void fly() {        System.out.println("I'm flying with rocket!");    }}

QuackBehavior接口:

public interface QuackBehavior {    void quack();}

Quack类:

public class Quack implements QuackBehavior{    public void quack() {        // TODO Auto-generated method stub        System.out.println("Quack!");    }}

Driver类:

public class Driver {    public static void main(String[] args) {        Duck model = new ModelDuck();        model.display();        model.swim();        model.performQuack();        model.performFly();        model.setFlyBehavior(new FlyWithRocket());        model.performFly();    }}
0 0