设计模式--策略模式

策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

策略模式的优点有:策略模式提供了管理相关的算法族的办法、策略模式提供了可以替换继承关系的办法、使用策略模式可以避免使用多重条件转移语句。

以上来自百度百科!!

设计原则:

1、找出应用中可能需要变化之处,把它独立出来,不要和那些不需要变化的代码混在一起。

2、针对接口编程,而不是针对实现编程。

3、多用组合,少用继承。

类图:


代码:

两个接口:FlyBehavior、QuackBehavior

/**

* 飞行接口

*/

public interface FlyBehavior {

    /**

    * 飞行方法

    */

    public void fly();

}

/**

* 叫声接口

*/

public interface QuackBehavior {

    /**

    * 叫声接口

    */

    public void quack();

}

两个接口实现类:FlyWithRocket 、HeQuack

public class FlyWithRocket implements FlyBehavior{

    @Override

    public void fly() {

        System.out.println("Fly With Rocket!!!");

    }

}

public class HeQuack implements QuackBehavior {

    @Override

    public void quack() {

        System.out.println("guaguaguagsdfsdfsdf");

    }

}

鸭子实体 Duck

/**

* 鸭子实体

*/

public class Duck {

    public FlyBehavior flyBehavior;

    public QuackBehavior quackBehavior;

    public void performQuack(){

        quackBehavior.quack();

    }

    public void performFly(){

        flyBehavior.fly();

    }

    public void swim(){

    }

    public void display(){

    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {

        this.flyBehavior = flyBehavior;

    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {

        this.quackBehavior = quackBehavior;

    }

}

鸭子实体子类:ModelDuck

/**

* 模型鸭子实体

*/

public class ModelDuck extends Duck{

    public ModelDuck(){

        flyBehavior=new FlyNoWay();

        quackBehavior=new HeQuack();

    }

    @Override

    public void display() {

        //*****

    }

}

运行测试类:PatternStrategy

/**

* Created by zyzhmily on 2018/5/19.

*/

public class PatternStrategy {

    public static void main(String[] args){

        Duck model=new ModelDuck();

        model.performFly();

        model.setFlyBehavior(new FlyNoWay());

        model.performFly();

    }

}

本文来自 《Head First 设计模式》

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 需求描述: 鸭子类(duck) 多个品种的鸭子(红头鸭,绿毛鸭,玩具鸭) 多种行为动作(呱呱叫,飞翔,外观展示) ...
    seemoonup阅读 290评论 0赞 0
  • Strategy:找出变化的部分独立出来进行封装,对象行为型模式。 策略模式定义了算法簇,分别封装起来,让他们相互...
    TheLittleSky阅读 227评论 1赞 0
  • 设计模式 开题先说明一下,设计模式告诉我们如何组织类和对象以解决某种问题。让代码变得更加优雅是我们责无旁贷的任务 ...
    tanghuailong阅读 526评论 0赞 2
  • 有的公司活着,被人们铭记,书写了历史。而大部分公司死了,如尘埃,风起间无踪影。作为其中一粒不知归处的尘埃,首先,向...
    一木禾阅读 1,459评论 15赞 21
  • 在墁坪,我学会的第一件活儿 就是砍树梢 我用那把锋利的山刀 砍去桦树的头颅 砍去青冈的手臂 砍去椴树的脚腂 再把自...
    甘肃子溪阅读 371评论 0赞 1

友情链接更多精彩内容