zoukankan      html  css  js  c++  java
  • Chapter 2.策略模式

    首先贴一段代码:

    package xiao;

    import java.util.Scanner;

    class CashSuper{
        private int num;
        private double price;
        public int getNum() {
            return num;
        }
        public void setNum(int num) {
            this.num = num;
        }
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        public double acceptCash(double money){
            return money;
        }
    }
    class CashNormal extends CashSuper{
    }
    class CashRebate extends CashSuper{
        private double rebate;
        public CashRebate(double rebate){
            this.rebate = rebate;
        }
        public double getRebate() {
            return rebate;
        }
        public void setRebate(double rebate) {
            this.rebate = rebate;
        }
        public double acceptCash(double money){
            return money*rebate;
        }    
    }
    class CashReturn extends CashSuper{
        private double moneyCondition;
        private double moneyReturn;
        public CashReturn(double moneyCondition,double moneyReturn){
            this.moneyCondition = moneyCondition;
            this.moneyReturn = moneyReturn;
        }
        public double getMoneyCondition() {
            return moneyCondition;
        }
        public void setMoneyCondition(double moneyCondition) {
            this.moneyCondition = moneyCondition;
        }
        public double getMoneyReturn() {
            return moneyReturn;
        }
        public void setMoneyReturn(double moneyReturn) {
            this.moneyReturn = moneyReturn;
        }
        public double acceptCash(double money){
            if(money > moneyCondition){
                return money - Math.floor(money/moneyCondition)*moneyReturn;
            }else{
                return money;
            }
        }    
    }
    class CashFactory{
        public static CashSuper creatCash(String select){
            CashSuper cash = new CashSuper();
            Scanner in = new Scanner(System.in);
            switch(select){
            case"normal":
                cash = new CashNormal();
                break;
            case"rebate":
                System.out.print("please enter the rebate: ");
                double rebat = in.nextDouble();
                cash = new CashRebate(rebat);
                break;
            case"return":
                System.out.print("please enter the moneyCondition: ");
                double moneyCondition = in.nextDouble();
                System.out.print("please enter the moneyReturn: ");
                double moneyReturn = in.nextDouble();
                cash = new CashReturn(moneyCondition,moneyReturn);
                break;
            }
            in.close();
            return cash;
        }
    }
    class CashContext{
        CashSuper cs =null;
        Scanner in = new Scanner(System.in);
        public CashContext(String type){
            switch(type){
            case"normal":
                CashNormal cash0 = new CashNormal();
                cs = cash0;
                break;
            case"rebate":
                System.out.print("please enter the rebate: ");
                double rebat = in.nextDouble();
                CashRebate cash1 = new CashRebate(rebat);
                cs = cash1;
                break;
            case"return":
                System.out.print("please enter the moneyCondition: ");
                double moneyCondition = in.nextDouble();
                System.out.print("please enter the moneyReturn: ");
                double moneyReturn = in.nextDouble();
                CashReturn cash2 = new CashReturn(moneyCondition,moneyReturn);
                cs = cash2;
                break;
            }
        }
        public double GetResult(double money){
            return cs.acceptCash(money);
        }
    }

    public class TestDemo{
        public static void main(String[] args)throws Exception{
            Scanner in = new Scanner(System.in);
            System.out.print("please enter the price: ");
            double price = in.nextDouble();
            System.out.print("please enter the num: ");
            int num = in.nextInt();
            System.out.print("please enter the select: ");
            String select = in.next();
            CashContext csuper = new CashContext(select);
            System.out.println(csuper.GetResult(num*price));
            in.close();
        }
    }

    策略模式:一种定义一系列算法的方法。所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。

    策略模式是用来封装算法的,只要在分析过程中听到需要再不同时间应用不同的业务规则,就可以考虑。

  • 相关阅读:
    docker 创建新的镜像到私有仓库
    docker 数据管理<1>
    docker 数据管理<1>
    docker 运行挂载磁盘
    docker 运行挂载磁盘
    docker 容器管理上
    docker 指定容器名字
    消息队列应用场景解析
    Apache软件基金会Member陈亮:一名开源拓荒者的 Apache之旅
    【干货贴】消息队列如何利用标签实现消息过滤
  • 原文地址:https://www.cnblogs.com/tuifeideyouran/p/3726116.html
Copyright © 2011-2022 走看看