设计模式-策略模式

1.所用到的类

一个抽象类:用于派生子类

一个Context类:用于变成各种子类形态

N个子类:

2.实现代码

抽象类

java 复制代码
public abstract class CashSuper {
    public abstract double acceptCash(double money);
}

Context类

java 复制代码
public class CashContext {
    private CashSuper cs;
    public CashContext(String type)
    {
        switch ( type)
            {
                case "正常收费":
                    cs = new CashNormal();
                    break;
                case "满减收费":
                    cs = new CashReturn(300,100);
                    break;
                case "打折收费":
                    cs = new CashRebate(0.8);
                    break;
            }
    }
    public double getResult(double money)
    {
        return cs.acceptCash(money);
    }
}

子类1

java 复制代码
public class CashNormal extends CashSuper {
    @Override
    public double acceptCash(double money) {
        return money;
    }
}

子类2

java 复制代码
public class CashRebate extends CashSuper {
    private double moneyCondition = 0.0d;
    public CashRebate(double moneyCondition)
    {
        this.moneyCondition = moneyCondition;
    }
    @Override
    public double acceptCash(double money) {
        return money*moneyCondition;
    }
}

子类3

java 复制代码
public class CashReturn extends CashSuper {
    private double moneyCondition = 0.0d;
    private double moneyReturn = 0.0d;
    public CashReturn(double moneyCondition,double moneyReturn){
        this.moneyCondition = moneyCondition;
        this.moneyReturn = moneyReturn;
    }
    @Override
    public double acceptCash(double money) {
        if (money >= moneyCondition)
            return money - Math.floor(money / moneyCondition) * moneyReturn;
        return money;
    }
}

调用类

java 复制代码
@SpringBootApplication
public class StrategyApplication {
    public static void main(String[] args) {

        double money = 0;
        money = money + new CashContext("正常收费").getResult(500);
        money = money + new CashContext("满减收费").getResult(500);
        money = money + new CashContext("打折收费").getResult(500);
        System.out.println( money);
    }
}

3.总结

工厂是创建型模式,它的作用就是创建对象; 策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为。工厂模式在调用的时候是产生多种子类的实现类,而策略模式则都是产生Context类只是运行算法不同。

相关推荐
StevenGerrad1 天前
【读书笔记】架构整洁之道 P2~3 编程范式&设计原则
设计模式·架构·软件工程
大飞pkz1 天前
【设计模式】迭代器模式
开发语言·设计模式·c#·迭代器模式
zero13_小葵司2 天前
在不同开发语言与场景下设计模式的使用
java·开发语言·javascript·设计模式·策略模式
charlie1145141912 天前
精读 C++20 设计模式:行为型设计模式 — 状态机模式
c++·学习·设计模式·状态模式·c++20
charlie1145141912 天前
精读 C++20 设计模式:行为型设计模式——观察者模式
c++·学习·观察者模式·设计模式·程序设计·c++20
青草地溪水旁2 天前
设计模式(C++)详解——观察者模式(Observer)(2)
c++·观察者模式·设计模式
charlie1145141912 天前
精读 C++20 设计模式:行为型设计模式 — 备忘录模式
c++·学习·设计模式·c++20·备忘录模式
希望_睿智2 天前
实战设计模式之迭代器模式
c++·设计模式·架构
charlie1145141912 天前
精读C++20设计模式——行为型设计模式:策略模式
c++·学习·设计模式·策略模式·c++20
2023框框2 天前
方法器 --- 策略模式(Strategy Pattern)
java·策略模式