设计模式

来源:互联网 发布:伊藤绫子二宫和也 知乎 编辑:程序博客网 时间:2024/06/18 07:20

试用场景

这里写图片描述

实现一个小游戏
设计场景:我们已经有了一群鸭子的类
要给 每个不同的鸭子增加飞行,那么我们需要怎么做?

图解各鸭子的不同

这里写图片描述

设计超类

/** * 超类,所有的鸭子都要继承次类 * 抽象了鸭子的行为:显示与鸣叫 */public abstract class Duck {    /**     * 鸭子发出的叫声     * 通常行为,由抽类实现     */    public void quack(){        System.out.println("嘎嘎嘎嘎");    }    /**     * 每个鸭子的展示不同     */    public abstract void diaplay();    /**     * 飞行策略     */    private FlyingStragety flyingStragety;    public void setFlyingStragety(FlyingStragety flyingStragety) {        this.flyingStragety = flyingStragety;    }    /**     * 飞行     */    public void fly(){        flyingStragety.performFly();    }}

飞行策略

/** * 飞行策略接口 */public interface FlyingStragety {    void performFly();}/** * 不会飞的鸭子 */public class NotFly implements FlyingStragety {    @Override    public void performFly() {        System.out.println("不会飞");    }}/** * 振翅高飞 */public class HighFly implements FlyingStragety{    @Override    public void performFly() {        System.out.println("振翅高飞....");    }}/** * 穿太空衣服飞行 */public class SpaceFly implements  FlyingStragety {    @Override    public void performFly() {        System.out.println("穿太空衣飞行");    }}

为每个鸭子添加不同的飞行策略

/** * 小黄鸭 */public class MunchkinDuck extends Duck{    public MunchkinDuck(){        super.setFlyingStragety(new NotFly());    }    @Override    public void quack() {        System.out.println("我不会叫~");    }    @Override    public void diaplay() {        System.out.println("小黄鸭:我全身都是黄色....");    }}/** * 绿色鸭子 */public class GreenDuck extends Duck {    public GreenDuck(){        super.setFlyingStragety(new HighFly());    }    @Override    public void diaplay() {        System.out.println("我全身都是原谅色~");    }}/** * 太空鸭 */public class SpaceDuck extends Duck {    public SpaceDuck(){        super.setFlyingStragety(new SpaceFly());    }    @Override    public void quack() {        System.out.println("无线电通信");    @Override    public void diaplay() {        System.out.println("我穿着太空服");    }}

调用代码测试

//小黄鸭    Duck duck = new MunchkinDuck();    duck.diaplay();    duck.quack();    duck.fly();//小黄鸭输出结果    小黄鸭:我全身都是黄色....    我不会叫~    不会飞
 //小绿鸭        Duck duck = new GreenDuck();        duck.diaplay();        duck.quack();        duck.fly(); //输出结果        我全身都是原谅色~        嘎嘎嘎嘎        振翅高飞....
//太空鸭        Duck duck = new SpaceDuck();        duck.diaplay();        duck.quack();        duck.fly();//输出结果    我穿着太空服    无线电通信    穿太空衣飞行
原创粉丝点击