文章目录

  • 策略模式+简单工厂
  • (1)旅游出行策略(飞机,高铁,大巴,骑行,徒步至少两种出行方式)
  • (2)门票折扣

策略模式+简单工厂

(1)旅游出行策略(飞机,高铁,大巴,骑行,徒步至少两种出行方式)

出行类:

package gsg.gao4;
class AirplaneStrategy implements  TravelStrategy
{   public void travelMethod(){System.out.println("飞机游!");}
}class TrainStrategy implements  TravelStrategy
{public void travelMethod(){System.out.println("火车游!");}
}class BicycleTravelStrategy implements  TravelStrategy
{public void travelMethod(){System.out.println("大巴游!");}
}
class buxing implements  TravelStrategy
{public void travelMethod(){System.out.println("步行!");}
}

MyContext类:

package gsg.gao4;public class MyContext
{private TravelStrategy ts;public MyContext(TravelStrategy ts){this.ts=ts;}public void travelMethod(){ts.travelMethod();}
}
TravelStrategy类:
package gsg.gao4;interface TravelStrategy
{public void travelMethod();}
测试类;
package gsg.gao4;import java.util.Scanner;public class Client {public static void main(String args[]){System.out.println("请输入你的出行方式  1,飞机  2.火车  3.大巴 4.步行");//调用scoreInput方法,定义score接收用户输入值Scanner scoreInput = new Scanner(System.in);int score = scoreInput.nextInt();if (score==1) {MyContext mc=new MyContext(new AirplaneStrategy());mc.travelMethod();}else if (score==2) {MyContext mc=new MyContext(new TrainStrategy());mc.travelMethod();}else if (score==3) {MyContext mc=new MyContext(new BicycleTravelStrategy());mc.travelMethod();}else if (score==4) {MyContext mc=new MyContext(new buxing());mc.travelMethod();}}
}

结果:

(2)门票折扣

AgedDiscount类:

package gsg.gao1;
public class AgedDiscount implements Discount {private final double DISCOUNT = 0.5;public double calculate(double price) {System.out.println("老人票:");return price * DISCOUNT;}
}ChildrenDiscount类;
package gsg.gao1;
public class ChildrenDiscount implements Discount {public final double DISCOUNT =0;public double calculate(double price) {System.out.println("儿童票:");if(price>=20) {return price*DISCOUNT;}else {return price;}}
}
Discount类:
package gsg.gao1;public interface Discount {public double calculate(double price);}

StudentDiscount类;

package gsg.gao1;
public class StudentDiscount implements Discount {private final double DISCOUNT = 0.8;public double calculate(double price) {System.out.println("学生票:");return price * DISCOUNT;}
}
Ticket类:
package gsg.gao1;
public class Ticket {private  double price;private Discount discount;public void setPrice(double price) {this.price = price;}public void setDiscount(Discount discount) {this.discount = discount;}public double getPrice() {return discount.calculate(this.price);}}

测试类;

package gsg.gao1;import java.util.Scanner;public class Client {public static void main(String args[]) {Ticket tt = new Ticket();double orginalPrice=210.0;double currentPrice;tt.setPrice(orginalPrice);System.out.println("原始价为:" + orginalPrice);System.out.println("-------------");System.out.println("请输入你的票  1,老人票  2.学生票  3.儿童票");//调用scoreInput方法,定义score接收用户输入值Scanner scoreInput = new Scanner(System.in);int score = scoreInput.nextInt();if (score==1) {Discount discount;discount = new AgedDiscount();tt.setDiscount(discount);currentPrice = tt.getPrice();System.out.println("折后价为:"+currentPrice);}else if(score==2){Discount discount;discount = new StudentDiscount();tt.setDiscount(discount);currentPrice = tt.getPrice();System.out.println("折后价为:"+currentPrice);}else if (score==3) {Discount discount;discount = new ChildrenDiscount();tt.setDiscount(discount);currentPrice = tt.getPrice();System.out.println("折后价为:"+currentPrice);}  }}

结果:

策略模式+简单工厂之旅游出行策略与门票折扣案例相关推荐

  1. c++switch实现猜拳_策略模式+简单工厂+注解消除 if-else/switch-case

    消除代码中的 if-else/switch-case 在很多时候,我们代码中会有很多分支,而且分支下面的代码又有一些复杂的逻辑,相信很多人都喜欢用 if-else/switch-case 去实现.做的 ...

  2. 跨服务同步数据(MYSQL),@Scheduled定时任务,HttpClient分批发送数据,JSONobject,策略模式+简单工厂,异步@Async+CompletableFuture使用

    目录 1.实现远程post请求 下面首先创建HttpClient用来实现远程post请求 2.发送数据 接下来就是将获取的数据(SyncDataParam )通过http请求方式发送给另一个服务(ap ...

  3. 策略与简单工厂模式结合的实现--收银软件的代码及UML图

    策略模式和简单工厂模式的结合:把分支判断放到环境角色中. 解决简单工厂模式中提到的问题: ●关键:分支的switch依然去不掉 ●解决方法:依赖注入.反射.XML 简单工厂模式 策略模式 收银软件的策 ...

  4. 一种思路:策略模式 + 反射工厂,很好的实现了开闭原则

    作者 | 麻辣你个王子 来源 | blog.csdn.net/qq_28675967/article/details/90581208 应用场景:某天接到了一个需求,品牌给了一个第三方接口,例如:ww ...

  5. 策略模式与工厂模式的区别

    定义: 工厂模式的思想主要为:多个类似的子类继承同一个父类,对其父类中的变量进行操作:工厂类负责判断.控制哪个子类被执行,而工厂类调用子类完成后,返回的结果是该子类的父类,该父类中的变量已经被操作过了 ...

  6. 策略模式和工厂模式的区别_设计模式系列 — 策略模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(si ...

  7. 策略模式和工厂模式的区别

    文章目录 策略模式和工厂模式的区别 相似点 差异 用途不一样 关注点不一样 UML图 实例 策略模式和工厂模式的区别 相似点 在模式结构上,两者很相似: 差异 用途不一样 工厂是创建型模式,它的作用就 ...

  8. 设计模式——策略模式,工厂模式,代理模式三者的区别

    工厂模式主要是返回的接口实现类的实例化对象,最后返回的结果是接口实现类中的方法,而策略模式是在实例化策略模式的时候已经创建好了,我们可以再策略模式中随意的拼接重写方法,而工厂模式是不管方法的拼接这些的 ...

  9. 策略模式和工厂模式在促销系统下的应用

    策略模式和工厂模式在促销系统下的应用 设计模式为我们提供了在某些应用场景下特定问题的解决方案,今天我们利用策略模式和工厂模式实现一个简单的促销系统. 实现语言:PHP 我们先来回顾一下策略模式和工厂模 ...

最新文章

  1. 【Codeforces】1015B Obtaining the String(字符串 交换)
  2. 解决不了bug先放着,这里有40条提升编程技能小妙招
  3. 嵌入式学习笔记-LM75温度传感器驱动总结
  4. 数据挖掘 —— 探索性数据分析
  5. oracle mysql 数据验证工具_Oracle Orion tool check io(ORACLE Orion 工具查看以及校验IO)
  6. [深度学习]CTR模型如何加入稠密连续型|多值类别特征
  7. 解决“Failure to find com.oracle:ojdbc6:jar”,手动安装ojdbc的jar包到maven私仓
  8. Command NetWork(POJ-3164)
  9. [转]Oracle_ProC编程
  10. 使用datepickerdialog提示is undefined错误_23.5 使用视图
  11. java的字符串指针数组,C语言字符串中的指针与数组
  12. java swing 最小化到托盘_用Java实现程序最小化到托盘区
  13. 解密Google、百度搜索引擎揭秘
  14. mysql数据库文件结构同步,[数据库的表同步mysql]MySQL表结构同步
  15. Qcom ramdump 解析
  16. KEL安装和初步研究
  17. C#编程:常用数学函数
  18. Android应用自启动保活手段与安全现状分析
  19. python为自己龟蜗速更新的小说生成词云
  20. Dubbo篇:基于Netty实现Dubbo协议编解码源码分析

热门文章

  1. fastboot flash system.img总失败
  2. XP win7双系统安装及激活
  3. CPU、GPU知道了,那么什么是TPU、NPU
  4. [附源码]Nodejs计算机毕业设计商场VIP管理系统Express(程序+LW)
  5. 数据结构 第四节 第四课
  6. 更有效的桌面环境切换方式
  7. 软文撰写的方向与素材,写作后的新闻软文发布网站选择
  8. 女星品牌活动时尚大片,个个都是强气场
  9. 极光厂商通道接入配置
  10. 四川诚自科技公司面试总结