我眼中的策略模式
前一段时间在朋友的极力推荐下,有幸拜读了head.first 的大作《设计模式》,阅读了几章之后猛然发现,原来技术文章也可以写的如此通俗,优雅。遂想将个人的一些读后感和对书中设计模式的理解整理成文,与众程序员朋友分享。同时,也希望您能慷慨的发表自己的看法与理解,帮助新晋的程序员朋友在软件开发之路上走的更加从容。如果您正好看过此书,请一定不吝赐教。欢迎大家拍砖!
下面是我对书中策略模式的讲解的分析:
场景:一款模拟鸭子的游戏,游戏中出现各种鸭子,一边戏水,一边呱呱叫
描述:有一个鸭子的抽象类,各种鸭子继承此类
鸭子种类:红头鸭,绿头鸭,木头假鸭,橡皮鸭
抽象类的方法:quack(),swim(),abstract display()
补充:抽象类中已对quack和swim进行了实现。鸭子正常叫为呱呱叫,红头与绿头鸭呱呱叫,木头鸭不会叫,橡皮鸭会吱吱叫
此设计优点:子类可复用quack(),swim()方法
此设计缺点:个别种类的鸭子需要覆盖父类的quack方法满足自己的需求(例如木头鸭不会叫)
public abstract class Duck{ public void quack(){ System.out.println("呱呱叫"); } public void swim(){ System.out.println("戏水"); } public abstract void display();}
public abstract class Duck{ public void quack(){ System.out.println("呱呱叫"); } public void swim(){ System.out.println("戏水"); } public void fly(){ System.out.println("飞行"); } public abstract void display();}
public interface Flyable{ public void fly();}
public interface Quack{ public void quack();}public interface Flyable{ public void fly();}public class FlyWithWing implements Flyable{ public void fly(){ System.out.println("用翅膀飞行"); }}public class ZhiZhiQuack implements Quack{ public void quack(){ System.out.println("吱吱叫"); }}public class GuaGuaQuack implements Quack{ public void quack(){ System.out.println("呱呱叫"); }}
public abstract class Duck{ private Quack quack; private Flyable fly; public void executeQuack(){ quack.quack(); } public void executeFly(){ fly.fly(); } public void setQuack(Quack q){ this.quack=q; } public void setFly(Flyable f){ this.fly=f; } public void swim(){ System.out.println("戏水"); } public abstract void display();}