首页 > 编程语言 > 详细

java常用设计模式(二)策略模式

时间:2019-06-19 17:44:30      阅读:136      评论:0      收藏:0      [点我收藏+]

  设计模式第二篇,策略模式,请大家多多指教。

简介

  策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用该算法的客户(引自《Head First设计模式》)。举个栗子,我们可以用旅行这一行为来代入该模式,我们旅行的交通工具可以选择汽车、火车、飞机、轮船等等,这些可供选择的交通工具可以理解为算法族,他们之间是可以相互替换的,我们通过使用不同的交通工具来达到我们相同的一个目标,这就是策略模式。说了这些理论知识,让我们通过代码来具体实现该模式。

策略模式的例子

  第一步:定义一个旅行接口TravelBehavior,有一个选择交通工具这一方法。

public interface TravelBehavior {

    /** 选择交通工具 */
    void chooseVehicle();
}

  第二步:定义n个可供选择的出行方式类,实现TravelBehavior接口

public class AirplaneBehavior implements TravelBehavior{
    /**
     * 选择交通工具
     */
    @Override
    public void chooseVehicle() {
        System.out.println("我选择飞机");
    }
}

public class BusBehavior implements TravelBehavior{
    /**
     * 选择交通工具
     */
    @Override
    public void chooseVehicle() {
        System.out.println("我选择大巴");
    }
}

public class SteamshipBehavior implements TravelBehavior{
    /**
     * 选择交通工具
     */
    @Override
    public void chooseVehicle() {
        System.out.println("我选择轮船");
    }
}

public class TrainBehavior implements TravelBehavior{
    /**
     * 选择交通工具
     */
    @Override
    public void chooseVehicle() {
        System.out.println("我选择火车");
    }
}

public class WalkBehavior implements TravelBehavior{

    /**
     * 选择交通工具
     */
    @Override
    public void chooseVehicle() {
        System.out.println("我选择走路");
    }
}

  第三步:定义一个人的类Person,有一个成员变量是旅行的行为

public class Person {

    private TravelBehavior travelBehavior;

    public Person(TravelBehavior travelBehavior) {
        this.travelBehavior = travelBehavior;
    }

    public void go(){
        travelBehavior.chooseVehicle();
        System.out.println("出发");
    }
}

  第四步:开始测试

public class TravelTest {

    private static Map<String,Object> behaviorMap = new HashMap<>();

    static {
        behaviorMap.put("airPlain",new AirplaneBehavior());
        behaviorMap.put("bus",new BusBehavior());
        behaviorMap.put("ship",new SteamshipBehavior());
        behaviorMap.put("train",new TrainBehavior());
        behaviorMap.put("walk",new WalkBehavior());
    }

    public static void go(String way){
        if(StringUtils.isEmpty(way)){
           way = "walk";
        }
        Person person = new Person((TravelBehavior) behaviorMap.get(way));
        person.go();
    }

    public static void main(String[] args) {
        //此处模拟前台传递给后台的参数:出行方式
        String way = "";
        go(way);
    }

}

 

总结

  上面写了一个最简单的策略模式(我估计没有比这个更简单的了),我们来总结一下,首先人出行的方式我们抽象出来了,同理我们能够抽象出人吃饭、穿衣、工作等等一系列的行为,我们为每种行为都能定义出具体的实现。按照《head first设计模式》一书中提到的设计模式要素:算法族(旅行方式)、分别封装(各种行为的具体实现)、相互替换(做到了)。当然,写到这里这个例子的问题还有很多,比如说旅行其实不能通过单纯的行为替换来实现,应该算是一种组合行为的替换,又比如说,人应该是一种抽象,不是所有的“人”都能出行(假人就不行)等等。缺点很多,但是上面的例子应该把策略模式的思想体现出来了,望大家都能够领悟这种思想,并在实际开发中多多应用。

java常用设计模式(二)策略模式

原文:https://www.cnblogs.com/blue-and-white/p/11052697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!