前言:最近在看Head First设计模式,有所收获记录总结一下,今天说一下策略模式解决的问题。

1 package com.alibaba.strategy; 2 3 /** 4 * 鸭子类 -- 策略模式超类 5 * 6 * @author Mr.Tk 7 * @date 2019/3/09 16:25 8 */ 9 public abstract class Duck { 10 11 /** 12 * 飞行行为 13 */ 14 FlyBehavior flyBehavior; 15 16 /** 17 * 叫声行为 18 */ 19 QuackBehavior quackBehavior; 20 21 public Duck() { 22 23 } 24 25 /** 26 * 鸭子的颜色 27 */ 28 public abstract void display(); 29 30 /** 31 * 委托执行飞行方法 32 */ 33 public void performFly() { 34 flyBehavior.fly(); 35 } 36 37 /** 38 * 委托执行叫声方法 39 */ 40 public void performQuack() { 41 quackBehavior.quack(); 42 } 43 44 /** 45 * 游泳方法 46 */ 47 public void swim() { 48 System.out.println("鸭子在游泳,请勿打扰。烧烤请左转..."); 49 } 50 51 }
package com.alibaba.strategy; /** * 鸭子的飞行,行为接口 * * @author Mr.Tk * @date 2019/3/09 16:28 */ public interface FlyBehavior { void fly(); }
package com.alibaba.strategy; /** * 鸭子叫声,行为接口 * * @author Mr.Tk * @date 2019/3/09 16:29 */ public interface QuackBehavior { void quack(); }
1 package com.alibaba.strategy.impl; 2 3 import com.alibaba.strategy.FlyBehavior; 4 5 /** 6 * 展翅高飞 7 * 8 * @author Mr.Tk 9 * @date 2019/3/09 16:29 10 */ 11 public class FlyWithwings implements FlyBehavior { 12 @Override 13 public void fly() { 14 System.out.println("展翅高飞的鸭子。。。"); 15 } 16 }
package com.alibaba.strategy.impl; import com.alibaba.strategy.FlyBehavior; /** * 不会飞行的鸭子 * * @author Mr.Tk * @date 2019/3/09 16:29 */ public class FlyNoWay implements FlyBehavior { @Override public void fly() { System.out.println("本鸭不会飞,告辞。。。"); } }
1 package com.alibaba.strategy.impl; 2 3 import com.alibaba.strategy.QuackBehavior; 4 /** 5 * 鸭子叫 6 * 7 * @author Mr.Tk 8 * @date 2019/3/09 16:46 9 */ 10 public class Quack implements QuackBehavior { 11 @Override 12 public void quack() { 13 System.out.println("鸭子叫声。。。"); 14 } 15 }
1 package com.alibaba.strategy.impl; 2 3 import com.alibaba.strategy.QuackBehavior; 4 /** 5 * 不会叫的鸭子 6 * 7 * @author Mr.Tk 8 * @date 2019/3/09 16:46 9 */ 10 public class MuteQuack implements QuackBehavior { 11 @Override 12 public void quack() { 13 System.out.println("鸭子不会叫。。。"); 14 } 15 }
1 package com.alibaba.strategy.impl; 2 3 import com.alibaba.strategy.QuackBehavior; 4 5 /** 6 * 吱吱叫的鸭子 7 * 8 * @author Mr.Tk 9 * @date 2019/3/09 16:46 10 */ 11 public class Squeak implements QuackBehavior { 12 @Override 13 public void quack() { 14 System.out.println("吱吱叫的鸭子。。。"); 15 } 16 }
1 package com.alibaba.strategy; 2 3 import com.alibaba.strategy.impl.FlyWithwings; 4 import com.alibaba.strategy.impl.Quack; 5 6 /** 7 * 小黄鸭 8 * 9 * @author Mr.Tk 10 * @date 2019/3/09 16:51 11 */ 12 public class YellowDuck extends Duck { 13 14 public YellowDuck() { 15 quackBehavior = new Quack(); 16 flyBehavior = new FlyWithwings(); 17 } 18 19 @Override 20 public void display() { 21 System.out.println("烧烤小黄鸭。。。"); 22 } 23 }
1 package com.alibaba.strategy; 2 3 public class Test { 4 5 public static void main(String[] args) { 6 //创建小黄鸭 7 Duck yellowDuck = new YellowDuck(); 8 //飞起来 9 yellowDuck.performFly(); 10 //叫起来 11 yellowDuck.performQuack(); 12 //游泳 13 yellowDuck.swim(); 14 //展示 15 yellowDuck.display(); 16 } 17 }
展翅高飞的鸭子。。。 鸭子叫声。。。 鸭子在游泳,请勿打扰。烧烤请左转... 烧烤小黄鸭。。。 Process finished with exit code 0
原文:https://www.cnblogs.com/yuxiaoming/p/10501598.html