zoukankan      html  css  js  c++  java
  • 策略模式(2.商场收银软件)

    1.策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类直接的耦合。
     2策略模式就是用来封装算法的,但在实践中,我们发现可以用它封装几乎任何类的规则,只要在分析过程中听到需要在不同的业务规则,就可以考虑使用策略模式处理,这种变化的可能性
     *3.策略模式优点:简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试

    /**
     *
     * 1.@author zhangqf
     *现金收取类
     */
    public interface  CashSuper {
        /***
         * 收取现金,参数是原价,返回的是当前价(打折,返利后的价格)
         * @param money
         * @return
         */
        public double acceptCash(double money);
    }

    /**
     * 2.正常收费,没有任何活动
     * @author zhangqf
     *
     */
    public class CashNormal implements CashSuper{

        @Override
        public double acceptCash(double money) {
            // TODO Auto-generated method stub
            return money;
        }

    }

    /**
     * 3.打折收费,
     * @author zhangqf
     *
     */
    public class CashRabate implements CashSuper{
        public double moneyRabate;
        /**
         * 打折收费,传一个参数就可以,打几折
         * @param rabate
         */
        public CashRabate(String rabate) {
            this.moneyRabate=Double.parseDouble(rabate);
        }

        @Override
        public double acceptCash(double money) {
            
            return this.moneyRabate;
        }

    }

    /**
     * 4.返利收费,满多少返多少
     * @author zhangqf
     *
     */
    public class CashReturn implements CashSuper{

        private double moneyCondition;//满足多少金额,才可以返利
        private double moneyReturn;//规定返多少利
        /**
         * 返利收费两个参数:
         * @param moneyCon 满多少金额以上
         * @param moneyRe 返利返多少
         */
        public CashReturn(String moneyCon,String moneyRe) {
            this.moneyCondition=Double.parseDouble(moneyCon);
            this.moneyReturn=Double.parseDouble(moneyRe);
            
        }
        @Override
        public double acceptCash(double money) {
            double result=0d;
            if (money>this.moneyCondition) {//400>300
                result=money-(money/this.moneyCondition)*this.moneyReturn;//400-(400/300)*100;
            }
            
            return result;
        }

    }

    /**
     * 5.策略类
     * @author zhangqf
     *1.策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类直接的耦合。
     *策略模式就是用来封装算法的,但在实践中,我们发现可以用它封装几乎任何类的规则,只要在分析过程中听到需要在不同的业务规则,就可以考虑使用策略模式处理,这种变化的可能性
     *2.策略模式优点:简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试
     */
    public class ContextStrategy {
            
        private CashSuper cashSuper;
        /**
         * 策略模式的Strategy类层次为Context定义了一系列的课供重用的算法或行为,继承有助于析取出这些算法中的公共功能
         * 对于打折,返利,或其他的算法,都是对实际商品收费的一种计算方式,通过继承,可以得到他们的公共功能,例如就是获得计算费用的结果getResult
         * 这使得算法间有了抽象的父类
         * @param type
         */
        public  ContextStrategy(String type) {
            switch (type) {
            case "normal":
                this.cashSuper=new CashNormal();
                break;
            case "rebate":
                this.cashSuper=new CashRabate("0.5");
                break;
            case "return":
                this.cashSuper=new CashReturn("300", "100");
                break;
            default:
                System.out.println("没有符合模式!");
                break;
            }
            
        }
        
        /**
         * 调用算法
         */
        
        public double getResult(double money) {
            return cashSuper.acceptCash(money);
        }

    }
    /**
     * 6.我对策略模式的理解:就是封装不同算法,调用公共方法得到结果
     * 通过策略模式调用不同的计算算法,得到公共结果(公共结果里包含封装的算法)
     * @param args
     */
        public static void main(String[] args) {
            
            ContextStrategy contextStrategy=new ContextStrategy("return");
            double returnMoney=contextStrategy.getResult(400);
            
            System.out.println("返利收费:"+returnMoney);
        }

    }

    运行结果:返利收费:266.6666666666667

    明天用SWT写一个前台小程序,收银这个模块

  • 相关阅读:
    OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程
    OPPO R11 R11plus系列 解锁BootLoader ROOT Xposed 你的手机你做主
    努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT
    华为 荣耀 等手机解锁BootLoader
    青橙 M4 解锁BootLoader 并刷入recovery ROOT
    程序员修炼之道阅读笔03
    冲刺8
    典型用户模板分析
    学习进度八
    冲刺7
  • 原文地址:https://www.cnblogs.com/zhangqf/p/6090808.html
Copyright © 2011-2022 走看看