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

    问题描述:

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

    类图:

    Java源代码:

     

    //Person.java
    package shiyan23;
    /**
     * @Description:客户(环境类)
     * @author 张紫诺
     *
     */
    public class Person {
        //聚合策略类对象
        private TravelStrategy strategy;
        public void setStrategy(TravelStrategy strategy) {
            this.strategy=strategy;
        }
        public void travel() {
            strategy.travel();
        }
    }
    //TravelStrategy.java
    package shiyan23;
    /**
     * @Description:抽象策略类
     * @author 张紫诺
     *
     */
    public interface TravelStrategy {
        public void travel();
    }
    //AirplaneStrategy.java
    package shiyan23;
    /**
     * @Description:具体策略类,封装算法
     * @author 张紫诺
     *
     */
    public class AirplaneStrategy implements TravelStrategy{
    
        public void travel() {
            System.out.println("乘坐飞机旅行");
        }
        
    }
    //BicycleStrategy.java
    package shiyan23;
    /**
     * @Description:具体策略类,封装算法
     * @author 张紫诺
     *
     */
    public class BicycleStrategy implements TravelStrategy{
    
        public void travel() {
            System.out.println("自行车游");
        }
        
    }
    //TrainStrategy.java
    package shiyan23;
    /**
     * @Description:具体策略类,封装算法
     * @author 张紫诺
     *
     */
    public class TrainStrategy implements TravelStrategy{
    
        public void travel() {
            System.out.println("乘火车旅行");
        }
        
    }
    //Client.java
    package shiyan23;
    
    import java.util.Scanner;
    
    public class Client {
        public static void main(String[] args) {
            Person p = new Person();
            System.out.println("请选择:1、飞机  2、火车  3、自行车");
            Scanner input=new Scanner(System.in);
            int i=input.nextInt();
            if(i==1) {
                p.setStrategy(new AirplaneStrategy());
            }else if(i==2) {
                p.setStrategy(new TrainStrategy());
            }else if(i==3) {
                p.setStrategy(new BicycleStrategy());
            }
            p.travel();
        }
    }

    运行结果:

     

     

  • 相关阅读:
    举个手问个问题;
    c++字符串详解(转)
    Glide请求图片能携带Cookie的哟!
    Glide加载异常调试
    Notification中使用Glide
    manifest中读取<meta-data>
    Glide 魔法般的自定义扩展
    服务端报错死循环,无法输出错误页面问题
    android必须要进行为不同分辨率设备切图
    TextView无法通过setText设值
  • 原文地址:https://www.cnblogs.com/znjy/p/15565324.html
Copyright © 2011-2022 走看看