【策略模式应用场景举例】
比如在玩“极品飞车”这款游戏,那么游戏对车的轮胎是可以更换的,不同的轮胎在高速转弯时有不同的痕迹样式,那么针对“汽车”的配件“轮胎”就要可以变化,而且轮胎和轮胎之间是可以相互替换的,这就是典型的要应用“策略模式”的场景!从程序结构中可以看到,完全符合了前面我们的要求:“灵活”,“顺序敏感”。
【策略模式解释】
类型:行为模式
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。
【策略模式UML图】
【策略模式-JAVA代码实现】
从策略模式UML图中可以看到Context与接口Strategy是组合关系,即强引用关系。
新建一个轮胎接口:
package strategy_interface;
public interface tyre_interface {
// tyre 轮胎
public void print_tyre_line();// 显示出轮胎的痕迹
}
新建2个轮胎接口的实现类:
package strategy_implement;
import strategy_interface.tyre_interface;
//长痕迹轮胎类
public class tyre_long_implement implements tyre_interface {
public void print_tyre_line() {
System.out.println("在路面上显示一个长轮胎痕迹");
}
}
package strategy_implement;
import strategy_interface.tyre_interface;
//短痕迹轮胎类
public class tyre_short_implement implements tyre_interface {
public void print_tyre_line() {
System.out.println("在路面上显示一个短轮胎痕迹");
}
}
基于一个轮胎接口来实现不同样式的轮胎样式。
组装一个Car车类:
package car_package;
import strategy_interface.tyre_interface;
public class Car {
private String make_address;// 制造地
private int death_year;// 报废年限
private int speed;// 速度
private tyre_interface tyre_interface_ref;// 轮胎的样式
public String getMake_address() {
return make_address;
}
public void setMake_address(String make_address) {
this.make_address = make_address;
}
public int getDeath_year() {
return death_year;
}
public void setDeath_year(int death_year) {
this.death_year = death_year;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public tyre_interface getTyre_interface_ref() {
return tyre_interface_ref;
}
public void setTyre_interface_ref(tyre_interface tyre_interface_ref) {
this.tyre_interface_ref = tyre_interface_ref;
}
public void start() {
System.out.println("车的基本信息为:");
System.out.println("制造地make_address:" + this.getMake_address());
System.out.println("报废年限death_year:" + this.getDeath_year());
System.out.println("速度speed:" + this.getSpeed());
System.out.println("Car 起动了!");
System.out.println("Car高速行驶,遇到一个大转弯,路面显示:");
this.getTyre_interface_ref().print_tyre_line();
}
}
让车跑起来,并且具有更换轮胎样式的功能:
package main_run;
import strategy_implement.tyre_long_implement;
import strategy_implement.tyre_short_implement;
import car_package.Car;
public class run_main {
public static void main(String[] args) {
tyre_long_implement tyre_long_implement = new tyre_long_implement();
tyre_short_implement tyre_short_implement = new tyre_short_implement();
Car car = new Car();
car.setDeath_year(8);
car.setMake_address("北京朝阳区");
car.setSpeed(200);
car.setTyre_interface_ref(tyre_long_implement);
car.start();
}
}
控制台打印出:
车的基本信息为:
制造地make_address:北京朝阳区
报废年限death_year:8
速度speed:200
Car 起动了!
Car高速行驶,遇到一个大转弯,路面显示:
在路面上显示一个长轮胎痕迹
是一个长轮胎痕迹,但在程序中可以使用代码:car.setTyre_interface_ref(tyre_long_implement);来对轮胎的样式进行不同的替换,可以替换成短轮胎痕迹的汽车轮胎,这样在不更改Car类的前题下进行了不同轮胎样式的改变,轮胎和轮胎之间可以互相替换,这就是策略模式。
分享到:
相关推荐
#资源达人分享计划#
以往的制造业模式已经不能满足当前的市场需求,制造业企业需要借助数字化转型来提高生产效率、降低成本、提高产品质量等。在数字化转型的过程中,制造业企业需要具备清晰的职责分工和路线规划,否则将面临实施工业...
创新驱动下装备制造业服务化转型的模式与策略研究,温馨,李婷婷,提供优质的服务已经成为当今装备制造业客户的重大需求,同时也是创新驱动下装备制造业内涵式发展的重要趋势。因而创新驱动下装备
Java策略者模式demo,支持博文请转:http://blog.csdn.net/xh870189248/article/details/71747282
论跨境电商发展背景下我国国际贸易面临的影响及对外贸易模式的转型策略
论跨境电商发展背景下我国国际贸易面临的影响及对外贸易模式的转型策略.pdf
基于中国电信运营商视角的物联网终端发展模式及发展策略研究,关冲,尹涛,当前,随着移动互联网的发展,全球电信运营商普遍面临市场饱和、增长乏力等问题,依赖于连接管道业务的通信产业正逐步陷入“增量�
1_翻转课堂模式下大学英语课堂学生学习参与提升策略研究_汤亚 (1).caj
20151223-安信证券-农业行业2016年度投资策略:把握景气周期反转,挖掘转型成功模式
“互联网 ”时代下农业经济发展模式转型升级的策略研究.pdf
20151223-安信证券-农业行业2016年度投资策略:把握景气周期反转,挖掘转型成功模式.pdf
电商聚集区转型升级策略研究——以义乌“青岩刘模式”为例
本文档主要介绍了在 HPUX 系统中配置安全策略的方法,包括如何将系统转换为 trust 模式、设置密码策略、审核和安全策略等。 1.1.1 操作方法 在 HPUX 系统中,转换为 trust 模式需要使用 /etc/tsconvert 命令。这个...
电商聚集区转型升级策略研究——以义乌“青岩刘模式”为例.pdf
本书包括了多个高级EJB设计模式,还提供了使用EJB设计模式的策略、J2EE开发的最佳实例,以及非常实用的EJB设计技巧和技术。本书还包括以下内容:架构模式、事务和持久性模式、客户端交互模式、主键一成策略。用Ant...
5. **策略模式(Strategy Pattern)**:策略模式是一种行为设计模式,定义了一系列算法,并使其可以相互替换,使得算法的变化独立于使用算法的客户端。 6. **适配器模式(Adapter Pattern)**:适配器模式是一种...
第1章 简介 ... 策略模式 外观模式 代理模式 中介者模式 观察者模式 小结 第8章 DOM和浏览器模式 关注分离 DOM脚本 事件 长期运行脚本 远程脚本 配置JavaScript 载入策略
* 策略模式:策略模式是一种行为型模式,它提供了一种选择不同的算法或策略,以便于更好地实现对象之间的关系。 * 模板方法模式:模板方法模式是一种行为型模式,它提供了一种实现算法的框架,以便于更好地实现对象...
请根据映射表和规则,给出0-100之间的转换结果,提示:不要直接在for循环中使用if判断,尽可能的使用设计模式。 ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,...
接着,它提出了一套系统化的转型路径,包括建立以客户为中心的思维模式、采用敏捷的运营策略、构建数据驱动的决策体系、实施跨界合作与创新,并不断迭代产品和服务以适应市场的快速变化。此外,资料还详细阐述了如何...