首页 > 其他分享 >策略模式

策略模式

时间:2022-11-03 16:00:23浏览次数:86  
标签:System 策略 travel TravelStrategy 模式 travelStrategy void public

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

 

类图

 

 

Java

   
package rjsj.no23;

public class BicycleStrategy implements TravelStrategy{
    @Override
    public void travel() {
        System.out.println("骑自行车旅游");
    }
}
     
package rjsj.no23;

public class Client {
    public static void main(String[] args) {
        Traveler traveler = new Traveler();

        System.out.println("旅游开始!");
        TravelStrategy travelStrategy = new TrainStrategy();
        traveler.setTravelStrategy(travelStrategy);
        traveler.travel();
        System.out.println("**************************************************");
        System.out.println("旅游开始!");
        travelStrategy = new AirplaneStrategy();
        traveler.setTravelStrategy(travelStrategy);
        traveler.travel();
        System.out.println("**************************************************");
        System.out.println("旅游开始!");
        travelStrategy = new BicycleStrategy();
        traveler.setTravelStrategy(travelStrategy);
        traveler.travel();
        System.out.println("**************************************************");
    }
}
     
package rjsj.no23;

public class TrainStrategy implements TravelStrategy{
    @Override
    public void travel() {
        System.out.println("坐火车旅游");
    }
}
     
package rjsj.no23;

public class Traveler {
    private TravelStrategy travelStrategy;

    public void setTravelStrategy(TravelStrategy travelStrategy) {
        this.travelStrategy = travelStrategy;
    }

    public void travel(){
        travelStrategy.travel();
    }
}
     
package rjsj.no23;

public interface TravelStrategy {
    void travel();
}
     
package rjsj.no23;

public class AirplaneStrategy implements TravelStrategy{
    @Override
    public void travel() {
        System.out.println("乘坐飞机旅游");
    }
}
 

 

 

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(){
        Person *pr=new Person();

        cout<<"旅游开始,请选择交通工具:"<<endl;
        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();
}
 

 

 

运行结果:

标签:System,策略,travel,TravelStrategy,模式,travelStrategy,void,public
From: https://www.cnblogs.com/libin159/p/16854753.html

相关文章

  • 【题解】P8818 [CSP-S 2022] 策略游戏
    【题解】P8818[CSP-S2022]策略游戏这道题应该是CSP-S2022所有题里面最简单的一道了,主要是有点套路,刨开套路,其实就是个静态维护区间最大最小值的板子。作为一名场外......
  • springboot中使用职责链模式(转)
    转:https://www.51cto.com/article/720107.html一、什么是责任链模式?责任链模式(ChainofResponsibilityPattern),顾名思义,为请求者和接受者之间创建一条对象处理链路,避免......
  • 警惕工具和模式的陷阱
    目前出现了很多优秀的工具和思维模式,可以帮助我们解决很多问题.但是根据"没有银弹"原则,不存在一种工具或者模式能解决所有的问题.任何问题表现的现状都和具体的情境下发......
  • 静态代理模式
    前言为某个对象提供一个代理,以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处......
  • 设计模式之结构型模式
    目录一、适配器模式二、装饰器模式三、代理模式四、外观模式五、享元模式六、桥接模式七、组合模式创建型模式(5个)工厂方法模式、抽象工厂模式、单例模式、建造者模式、原......
  • 华为交换机策略路由配置
    [S5720-core]acl2011rule5permitsource192.168.4.1310[S5720-core]trafficclassifiermail-to-idcif-matchacl2011[S5720-core]trafficbehaviormail-to-idcre......
  • 设计模式之代理,手动实现动态代理,揭秘原理实现
    开心一刻周末,带着老婆儿子一起逛公园。儿子一个人跑在前面,吧唧一下不小心摔了一跤,脑袋瓜子摔了个包,稀里哗啦的哭道:“爸爸,我会不会摔成傻子!”我指了指我头上的伤痕安......
  • 设计模式十三(数据访问对象模式,前端控制器模式)
    数据访问对象模式(DataAccessObjectPattern)或DAO模式用于把低级的数据访问API或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。数据访问对象......
  • 设计模式之代理模式
    概述代理模式是一种应用很广泛的结构型设计模式,而且变化很多。在代理模式中引入了一个新的代理对象,代理对象可以在客户端对象和目标对象之间起到中介的作用,去掉客户不能看......
  • 1-设计模式介绍
    1,设计模式概述1.1软件设计模式的产生背景"设计模式"最初被用于建筑领域的设计中。1977年美国著名建筑大师`克里斯托夫·亚历山大在他的著作《建筑模式语言:城镇、建筑、......