java设计模式学习之策略模式

《JAVA与模式》一书中开头是这样描述策略(Strategy)模式的:

  策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。



package duck;

import flyBehavior.BadFlyBehavior;
import quackBehavior.BadQuackBehavior;

/**
 * Created by Administrator on 2017/2/28.
 */
public class RedDuck extends Duck {
    @Override
    public void display() {
        System.out.println("I am Red");

    }

    public RedDuck() {
        mQuackBehavior = new BadQuackBehavior();
        mFlyBehavior = new BadFlyBehavior();
    }

}
package duck;

import flyBehavior.GoodFlyBehavior;
import quackBehavior.GoodQuackBehavior;

/**
 * Created by Administrator on 2017/2/28.
 */
public class BlackDuck extends Duck {


    public BlackDuck() {
        mFlyBehavior = new GoodFlyBehavior();
        mQuackBehavior = new GoodQuackBehavior();
    }

    @Override
    public void display() {
        System.out.println("I am Black!");
    }
}



package duck;

import flyBehavior.FlyBehavior;
import quackBehavior.QuackBehavior;

/**
 * Created by Administrator on 2017/2/28.
 */
public abstract class Duck {
    //飞行行为接口
    FlyBehavior mFlyBehavior;
    //叫声行为接口
    QuackBehavior mQuackBehavior;

    public Duck() {

    }

    //显示颜色
    public abstract void display();

    public void fly() {
        mFlyBehavior.fly();
    }

    public void quack() {
        mQuackBehavior.quack();
    }

    public FlyBehavior getmFlyBehavior() {
        return mFlyBehavior;
    }

    public void setmFlyBehavior(FlyBehavior mFlyBehavior) {
        this.mFlyBehavior = mFlyBehavior;
    }

    public QuackBehavior getmQuackBehavior() {
        return mQuackBehavior;
    }

    public void setmQuackBehavior(QuackBehavior mQuackBehavior) {
        this.mQuackBehavior = mQuackBehavior;
    }
}
package flyBehavior;

/**
 * Created by Administrator on 2017/2/28.
 */
public interface FlyBehavior {
    public void fly();
}
package flyBehavior;

/**
 * Created by Administrator on 2017/2/28.
 */
public class GoodFlyBehavior implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("is GoodFly");
    }
}
package flyBehavior;

/**
 * Created by Administrator on 2017/2/28.
 */
public class BadFlyBehavior implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("is BadFlyBehavior");
    }
}

package quackBehavior;

/**
 * Created by Administrator on 2017/2/28.
 */
public interface QuackBehavior {
    public void quack();
}
package quackBehavior;

/**
 * Created by Administrator on 2017/2/28.
 */
public class BadQuackBehavior implements QuackBehavior {
    @Override
    public void quack() {
        System.out.println("bad quack");
    }
}
package quackBehavior;

/**
 * Created by Administrator on 2017/2/28.
 */
public class GoodQuackBehavior implements QuackBehavior {
    @Override
    public void quack() {
        System.out.println("good quack");
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值