大话设计模式-策略模式(大鸟和小菜Java版)
Posted 香风智乃哈~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话设计模式-策略模式(大鸟和小菜Java版)相关的知识,希望对你有一定的参考价值。
策略模式:策略模式是指有一定行动内容的相对稳定的策略名称。策略模式在古代中又称“计策”,简称“计”,如《汉书·高帝纪上》:“汉王从其计”。这里的“计”指的就是计谋、策略。策略模式具有相对稳定的形式,如“避实就虚”、“出奇制胜”等。一定的策略模式,既可应用于战略决策,也可应用于战术决策;既可实施于大系统的全局性行动,也可实施于大系统的局部性行动。(来自百度百科)
这个策略模式,我感觉和贪心算法差不多,也就是找出来最优解,对自己最有利的策略
package 设计模式.策略模式;
//这个是抽象类,里面含有一个抽象方法,子类在继承的时候,必须要重写抽象方法
public abstract class CSuper {
public abstract double acceptCash(double money);
}
//继承父类
class CashNormal extends CSuper{
//重写抽象方法
@Override
public double acceptCash(double money) {
return money;
}
}
//继承父类
class CashRebate extends CSuper{
// 定义一个局部变量
private double moneyRebate = 1.0;
// 构造方法
public CashRebate(double moneyRebate) {
this.moneyRebate = moneyRebate;
}
//重写抽象方法
@Override
public double acceptCash(double money) {
return money * moneyRebate;
}
}
class CashReturn extends CSuper{
// 满多少,满足条件的变量
private double moneyCondition = 1.0;
// 返多少,减去的变量
private double moneyReturn = 1.0;
//构造方法
public CashReturn(double moneyCondition, double moneyReturn) {
this.moneyCondition = moneyCondition;
this.moneyReturn = moneyReturn;
}
//重写抽象方法
@Override
public double acceptCash(double money) {
double result = money;
if(money >= moneyCondition){
result = money - Math.floor(money / moneyCondition) * moneyReturn;
}
return result;
}
}
//计算这几种情况的类
class CashContext{
CSuper cs = null;
public CashContext(String type) {
switch (type){
// 正常收费的情况
case "正常收费":
CashNormal c0 = new CashNormal();
cs = c0;
break;
// 满300返100的情况
case "满300返100":
CashReturn c1 = new CashReturn(300,100);
cs = c1;
break;
// 打8折的情况
case "打8折":
CashRebate c2 = new CashRebate(0.8);
cs = c2;
break;
}
}
//计算出最后的总钱数,返回给主函数
public double getResult(double money) {
return cs.acceptCash(money);
}
}
上面的是对各个类的书写,下面对主类进行书写
package 设计模式.策略模式;
import java.util.Scanner;
public class CClient {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
CashContext context = new CashContext("正常收费");
System.out.println("请输入需要支付的钱数:");
int m = sc.nextInt();
double money0 = context.getResult(m);
System.out.println("单价为:"+money0+"元,"+"正常收费"+money0+"元");
context = new CashContext("打8折");
double money1 = context.getResult(m);
System.out.println("单价为:"+money0+"元,"+"打8折:"+money1+"元");
context = new CashContext("满300返100");
double money2 = context.getResult(m);
System.out.println("单价为:"+money0+"元,"+"满300返100:"+money2+"元");
}
}
相关结果
本文参考文章(更加详细):https://blog.csdn.net/qq_409407189/article/details/83346363
以上就是策略模式的代码
以上是关于大话设计模式-策略模式(大鸟和小菜Java版)的主要内容,如果未能解决你的问题,请参考以下文章