zoukankan      html  css  js  c++  java
  • 策略模式——C++实现

    问题描述:

    旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可以根据自己的需要选择一种合适的旅行方式。

    类图:

    C++源代码:

     

    #include<iostream>
    using namespace std;
    //抽象策略类
    class TravelStrategy{
    public:
    	virtual void travel()=0;
    };
    //具体策略类
    class AirplaneStrategy:public TravelStrategy{
    public:
    	void travel(){
    		cout<<"乘坐飞机旅行"<<endl;
    	}
    };
    //具体策略类
    class TrainStrategy:public TravelStrategy{
    public:
    	void travel(){
    		cout<<"乘坐火车旅行"<<endl;
    	}
    };
    //具体策略类
    class BicycleStrategy:public TravelStrategy{
    public:
    	void travel(){
    		cout<<"骑自行车旅行"<<endl;
    	}
    };
    //环境类
    class Person{
    private:
    	TravelStrategy *strategy;
    public:
    	void setStrategy(TravelStrategy *strategy){
    		this->strategy=strategy;
    	}
    	void travel(){
    		strategy->travel();
    	}
    };
    //测试函数
    int main(){
    	Person *p=new Person();
    	TravelStrategy *travel;
    	cout<<"*******菜单*******"<<endl;
    	cout<<"     1.飞机\n     2.火车\n     3.自行车"<<endl;
    	cout<<"******************"<<endl;
    	cout<<"请选择您的旅游方式:"<<endl;
    	int i;
    	cin>>i;
    	if(i==1){
    		travel=new AirplaneStrategy();
    	}else if(i==2){
    		travel=new TrainStrategy();
    	}else if(i==3){
    		travel=new BicycleStrategy();
    	}else{
    		cout<<"输入有误!"<<endl;
    	}
    	p->setStrategy(travel);
    	p->travel();
    }
    

      

    运行结果:

     

     

  • 相关阅读:
    轻量模型之Mobilenet
    GAN的Loss
    Ubuntu16.04安装后配置一条龙
    Hardnet论文阅读
    orb-slam2编译时遇到的问题
    编译opencv+opencv_contrib
    Sophus库使用踩坑
    CloudCompare Viewer使用心得
    交通场景语义分割
    ROS编译中遇到的问题
  • 原文地址:https://www.cnblogs.com/znjy/p/15565318.html
Copyright © 2011-2022 走看看