《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"); } }
java设计模式学习之策略模式
最新推荐文章于 2021-10-29 13:02:45 发布