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.场景介绍 购物网站上有一个产品,有三个字段,档次,价格,重量. 有些同学喜欢轻的,有些手头紧,想要便宜的,有些喜欢档次高的. 那么我们为了提高网站用户 ...
随机推荐
- Goland的GC回收机制
Goland的GC回收机制 GC触发的条件 阈值:默认内存扩大一倍,启动gc 定期:默认2min触发一次gc,src/runtime/proc.go:forcegcperiod 手动:runtime. ...
- JZ-033-丑数
丑数 题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. ...
- Xmake 和 C/C++ 包管理
Xmake 是一个基于 Lua 的轻量级跨平台构建工具,关于 Xmake 与构建系统的介绍,我们已经在之前的文章中做了详细的介绍:C/C++ 构建系统,我用 xmake. 如果大家已经对 Xmake ...
- 写出Zend 框架的目录结构,简单说明目录作用?
application/ – 存放应用程序的目录,包括MVC 系统.配置文件.服务以及引导程序(Bootstrap.php)configs/ –配置文件目录.application/modules – ...
- nginx 如何访问php文件
1.进入nginx安装路径,我的是/usr/local/nginxvi conf/nginx.conf将 location ~ \.php$ { root html; fastcgi_pass 127 ...
- python安装jupyter notebooks(windows下)
[1]前提 前提:下载好Python并把python添加到了Path路径 以3.8为例子,在安装的时候有个这个勾选项,Add Python 3.8 to PATH,勾上就好,没有的话.就把python ...
- Nginx高并发实现原理以及常用的优化手段
Nginx 是如何实现高并发的? 异步,非阻塞,使用了epoll 和大量的底层代码优化. 如果一个server采用一个进程负责一个request的方式,那么进程数就是并发数.正常情况下,会有很多进程一 ...
- Python knife 一款伪菜刀
Python knife 一款伪菜刀. 设计之初,本想只写个命令行的就可以了,但又想与众不同,想用python写代码,又不想用c#写前端(c#太卡了),万分无奈之下,找到一个替代品,Pyqt, ...
- [root-me](web-client)write up 一个大坑怎么填啊
root-me web-client writeup 地址:www.root-me.org HTML - disabled buttons 打开网页发现按钮不能按,查看源代码,有 'disabled' ...
- Key-Value存储系统简介
Redis是一个Key-Value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集合).这些数据类 ...