策略模式+简单工厂之旅游出行策略与门票折扣案例
文章目录
- 策略模式+简单工厂
- (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);} }}
结果:
策略模式+简单工厂之旅游出行策略与门票折扣案例相关推荐
- c++switch实现猜拳_策略模式+简单工厂+注解消除 if-else/switch-case
消除代码中的 if-else/switch-case 在很多时候,我们代码中会有很多分支,而且分支下面的代码又有一些复杂的逻辑,相信很多人都喜欢用 if-else/switch-case 去实现.做的 ...
- 跨服务同步数据(MYSQL),@Scheduled定时任务,HttpClient分批发送数据,JSONobject,策略模式+简单工厂,异步@Async+CompletableFuture使用
目录 1.实现远程post请求 下面首先创建HttpClient用来实现远程post请求 2.发送数据 接下来就是将获取的数据(SyncDataParam )通过http请求方式发送给另一个服务(ap ...
- 策略与简单工厂模式结合的实现--收银软件的代码及UML图
策略模式和简单工厂模式的结合:把分支判断放到环境角色中. 解决简单工厂模式中提到的问题: ●关键:分支的switch依然去不掉 ●解决方法:依赖注入.反射.XML 简单工厂模式 策略模式 收银软件的策 ...
- 一种思路:策略模式 + 反射工厂,很好的实现了开闭原则
作者 | 麻辣你个王子 来源 | blog.csdn.net/qq_28675967/article/details/90581208 应用场景:某天接到了一个需求,品牌给了一个第三方接口,例如:ww ...
- 策略模式与工厂模式的区别
定义: 工厂模式的思想主要为:多个类似的子类继承同一个父类,对其父类中的变量进行操作:工厂类负责判断.控制哪个子类被执行,而工厂类调用子类完成后,返回的结果是该子类的父类,该父类中的变量已经被操作过了 ...
- 策略模式和工厂模式的区别_设计模式系列 — 策略模式
点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(si ...
- 策略模式和工厂模式的区别
文章目录 策略模式和工厂模式的区别 相似点 差异 用途不一样 关注点不一样 UML图 实例 策略模式和工厂模式的区别 相似点 在模式结构上,两者很相似: 差异 用途不一样 工厂是创建型模式,它的作用就 ...
- 设计模式——策略模式,工厂模式,代理模式三者的区别
工厂模式主要是返回的接口实现类的实例化对象,最后返回的结果是接口实现类中的方法,而策略模式是在实例化策略模式的时候已经创建好了,我们可以再策略模式中随意的拼接重写方法,而工厂模式是不管方法的拼接这些的 ...
- 策略模式和工厂模式在促销系统下的应用
策略模式和工厂模式在促销系统下的应用 设计模式为我们提供了在某些应用场景下特定问题的解决方案,今天我们利用策略模式和工厂模式实现一个简单的促销系统. 实现语言:PHP 我们先来回顾一下策略模式和工厂模 ...
最新文章
- 【Codeforces】1015B Obtaining the String(字符串 交换)
- 解决不了bug先放着,这里有40条提升编程技能小妙招
- 嵌入式学习笔记-LM75温度传感器驱动总结
- 数据挖掘 —— 探索性数据分析
- oracle mysql 数据验证工具_Oracle Orion tool check io(ORACLE Orion 工具查看以及校验IO)
- [深度学习]CTR模型如何加入稠密连续型|多值类别特征
- 解决“Failure to find com.oracle:ojdbc6:jar”,手动安装ojdbc的jar包到maven私仓
- Command NetWork(POJ-3164)
- [转]Oracle_ProC编程
- 使用datepickerdialog提示is undefined错误_23.5 使用视图
- java的字符串指针数组,C语言字符串中的指针与数组
- java swing 最小化到托盘_用Java实现程序最小化到托盘区
- 解密Google、百度搜索引擎揭秘
- mysql数据库文件结构同步,[数据库的表同步mysql]MySQL表结构同步
- Qcom ramdump 解析
- KEL安装和初步研究
- C#编程:常用数学函数
- Android应用自启动保活手段与安全现状分析
- python为自己龟蜗速更新的小说生成词云
- Dubbo篇:基于Netty实现Dubbo协议编解码源码分析