Java/C++实现策略模式---旅游出行方式
旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可以根据自己的需要选择一种合适的旅行方式。
类图:

Java代码:
public class Person {
private TravelStrategy strategy;
public void setStrategy(TravelStrategy strategy) {
this.strategy=strategy;
}
public void travel() {
strategy.travel();
}
}
public interface TravelStrategy {
public void travel();
}
public class TrainStrategy implements TravelStrategy{
@Override
public void travel() {
// TODO Auto-generated method stub
System.out.println("乘火车旅游");
}
}
public class BicycleStrategy implements TravelStrategy{
@Override
public void travel() {
// TODO Auto-generated method stub
System.out.println("自行车游");
}
}
public class AirplaneStrategy implements TravelStrategy{
@Override
public void travel() {
// TODO Auto-generated method stub
System.out.println("乘坐飞机旅游");
}
}
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("我要去旅游,选哪种出行方式呢?");
Person pr=new Person();
TravelStrategy strategy=new TrainStrategy();
pr.setStrategy(strategy);
pr.travel();
System.out.println("------------------------------");
System.out.println("我要去旅游,选哪种出行方式呢?");
TravelStrategy strategy2=new BicycleStrategy();
pr.setStrategy(strategy2);
pr.travel();
System.out.println("------------------------------");
System.out.println("我要去旅游,选哪种出行方式呢?");
TravelStrategy strategy3=new AirplaneStrategy();
pr.setStrategy(strategy3);
pr.travel();
}
}
C++代码:
#include<iostream>
using namespace std;
class TravelStrategy {
public:
virtual void travel()=0;
};
class Person {
private:
TravelStrategy *strategy;
public:
void setStrategy(TravelStrategy *strategy) {
this->strategy=strategy;
}
void travel() {
this->strategy->travel();
}
};
class TrainStrategy : public TravelStrategy{
public:
void travel() {
cout<<"乘火车旅游"<<endl;
}
};
class BicycleStrategy : public TravelStrategy{
public:
void travel() {
cout<<"自行车游"<<endl;
}
};
class AirplaneStrategy: public TravelStrategy{
public:
void travel() {
cout<<"乘坐飞机旅游"<<endl;
}
};
int main(){
cout<<"我要去旅游,选哪种出行方式呢?"<<endl;
Person *pr=new Person();
TravelStrategy *strategy=new TrainStrategy();
pr->setStrategy(strategy);
pr->travel();
cout<<"------------------------------"<<endl;
cout<<"我要去旅游,选哪种出行方式呢?"<<endl;
TravelStrategy *strategy2=new BicycleStrategy();
pr->setStrategy(strategy2);
pr->travel();
cout<<"------------------------------"<<endl;
cout<<"我要去旅游,选哪种出行方式呢?"<<endl;
TravelStrategy *strategy3=new AirplaneStrategy();
pr->setStrategy(strategy3);
pr->travel();
}
运行结果:


Java/C++实现策略模式---旅游出行方式的更多相关文章
- Java设计模式之策略模式(Strategy)
前言: 最近一直在学习基于okHttp网络请求,学习的过程中就想起了之前项目中有这么一个需求不同的接口要采用不同的加密方式,比如登录之前要采用RSA加密,登录之后要采用AES加密,当时是采用靠传递一个 ...
- 折腾Java设计模式之策略模式
博客原文地址 简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.简单理解就是一组算法,可以互换,再简单点策略就是封装算法. ...
- Java设计模式1——策略模式(Strategy Pattern)
最近觅得一本好书<您的设计模式>,读完两章后就能断言,一定是一头极品屌丝写的,而且是专写给开发屌丝男的智慧枕边书,小女子就委屈一下,勉强看看,人笨,谁让他写得这么通俗易懂呢!为了加深理解, ...
- Java设计模式之-----策略模式
首先,我们来看下策略模式的概念.一般的解释如下: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(原文:The St ...
- java设计模式之——策略模式
1.策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象的行为. 2.设计原则 设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++中可以用虚类),然后在类中包含这 ...
- Spring 实现策略模式--自定义注解方式解耦if...else
策略模式 定义 定义一簇算法类,将每个算法分别封装起来,让他们可以互相替换,策略模式可以使算法的变化独立于使用它们的客户端 场景 使用策略模式,可以避免冗长的if-else 或 switch分支判断 ...
- JAVA设计模式 之 策略模式
一. 定义 设计模式定义了算法族,分别封装起来,让他们之间可以互相替代,此模式让算法的变化独立于使用算法的客户(该定义来自于Head First 设计模式). 二. 应用场景 当我们在应用程序中完成一 ...
- Java设计模式之策略模式(一)
今年寒假没有回家,打算利用这个假期的时间进行学习设计模式,这一个人感觉比较牛的知识,前一段时间一直在忙着搞自己的专业课,还有就是捣鼓了一下Linux系统,没有好好的学习关于Java还有Android方 ...
- Java设计模式---Strategy策略模式
参考于 : 大话设计模式 马士兵设计模式视频 1.场景介绍 购物网站上有一个产品,有三个字段,档次,价格,重量. 有些同学喜欢轻的,有些手头紧,想要便宜的,有些喜欢档次高的. 那么我们为了提高网站用户 ...
随机推荐
- think php 图像加水印
1.将下载好的字体引入至 thinkPHP 框架的public/static 下(这里我建了一个文件夹叫font) (1.) (2.) 2.将字体路径写入config.php中 'font'=&g ...
- Laravel-自带分页+搜索
public function getNewsList(){ $condition = []; $cond = []; if (!empty($_GET['title'])) { array_push ...
- [] == ![] 返回 true
对于==来说,如果数据类型不同,就会进行隐式类型转换. 首先判断是否在对比 null 和 undefined,是的话就会返回 true: 判断其中一方是否为 string ,在与 number进行比较 ...
- 一比一还原axios源码(四)—— Axios类
axios源码的分析,到目前为止,算上第0章已经四章了,但是实际上,还都没有进入axios真正的主线,我们来简单回顾下.最开始我们构建了get请求,写了重要的buildURL方法,然后我们处理请求体请 ...
- oneAPI DPC++学习资料和实验平台
DPC++ 一种新的异构平台,弥补了OPENCL 编写复杂的难题.基于SYCL 抽象层.基于SYCL 有多种实现,其中DPC++是相对成熟的方案. 书籍 由Intel工程师撰写的免费电子图书 Data ...
- 顺序表的插入和删除(基于c语言)
插入:在下标p处插入数据x:返回是否成功(0/1) 几个注意点:1.还能否插入数据:2.给的下标p是否是错误的以及p的范围:3.移动时的易错点(从下标大的元素开始):4.n与palist->n; ...
- Java基础——继承的特点
继承的优点: 1.提高了代码的复用性(多个类相同的成员可以放到一个类中) 2.提高了代码的维护性(如果要修改方法,只需要修改父类中的即可) 继承的缺点: 1.继承让类与类产生了关系,类的耦合性增强了, ...
- 平衡树:为什么Redis内部实现用跳跃表
摘要:Redis使用跳跃表(skiplist)作为有序集合(zset)的底层实现之一. 本文分享自华为云社区<5分钟了解Redis的内部实现跳跃表(skiplist)>,作者:万猫学社. ...
- 为什么你需要在用 Vue 渲染列表数据时指定 key
本文改写整理自一篇博文,原文链接如下: Why you should use the key directive in Vue.js with v-for Application state and ...
- IO笔记(学习尚硅谷java基础教程)
一.基础知识 1. 在普通方法和测试方法中文件路径的差异 在普通方法中:文件路径相当于在当前项目中,而不是当前Module(以项目为基准) 在测试方法中:文件路径相当于在当前Module中,而不是当前 ...