美文网首页
设计模式--策略模式

设计模式--策略模式

作者: 做一只快乐的码农1990 | 来源:发表于2018-05-19 16:20 被阅读0次

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

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

    以上来自百度百科!!

    设计原则:

    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 设计模式》

    相关文章

      网友评论

          本文标题:设计模式--策略模式

          本文链接:https://www.haomeiwen.com/subject/nvqadftx.html