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

本文通过旅行行为实例,深入浅出地介绍了策略模式,包括定义旅行行为接口、实现多种出行方式类、创建可替换的策略对象及Person类的运用。策略模式强调算法族的封装与替换,展示了如何在代码中实践这一设计模式。
摘要由CSDN通过智能技术生成

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

简介

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

策略模式的例子

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

public interfaceTravelBehavior {/**选择交通工具*/

voidchooseVehicle();

}

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

public class AirplaneBehavior implementsTravelBehavior{/*** 选择交通工具*/@Overridepublic voidchooseVehicle() {

System.out.println("我选择飞机");

}

}public class BusBehavior implementsTravelBehavior{/*** 选择交通工具*/@Overridepublic voidchooseVehicle() {

System.out.println("我选择大巴");

}

}public class SteamshipBehavior implementsTravelBehavior{/*** 选择交通工具*/@Overridepublic voidchooseVehicle() {

System.out.println("我选择轮船");

}

}public class TrainBehavior implementsTravelBehavior{/*** 选择交通工具*/@Overridepublic voidchooseVehicle() {

System.out.println("我选择火车");

}

}public class WalkBehavior implementsTravelBehavior{/*** 选择交通工具*/@Overridepublic voidchooseVehicle() {

System.out.println("我选择走路");

}

}

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

public classPerson {privateTravelBehavior travelBehavior;publicPerson(TravelBehavior travelBehavior) {this.travelBehavior =travelBehavior;

}public voidgo(){

travelBehavior.chooseVehicle();

System.out.println("出发");

}

}

第四步:开始测试

public classTravelTest {private static Map behaviorMap = new HashMap<>();static{

behaviorMap.put("airPlain",newAirplaneBehavior());

behaviorMap.put("bus",newBusBehavior());

behaviorMap.put("ship",newSteamshipBehavior());

behaviorMap.put("train",newTrainBehavior());

behaviorMap.put("walk",newWalkBehavior());

}public static voidgo(String way){if(StringUtils.isEmpty(way)){

way= "walk";

}

Person person= newPerson((TravelBehavior) behaviorMap.get(way));

person.go();

}public static voidmain(String[] args) {//此处模拟前台传递给后台的参数:出行方式

String way = "";

go(way);

}

}

总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值