码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式--策略模式

时间:2018-05-19 18:43:27      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:接口   子类   sdfsdf   多重   mod   代码   实现   图片   rri   

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

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

以上来自百度百科!!

设计原则:

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

设计模式--策略模式

标签:接口   子类   sdfsdf   多重   mod   代码   实现   图片   rri   

原文地址:https://www.cnblogs.com/hmily555/p/9060713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!