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

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

    策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。

    CashCollect.java类

    package strategy;
    
    import java.math.BigDecimal;
    
    public abstract class CashCollect {
        public abstract BigDecimal cashCollect(BigDecimal total);
        
    }

    DisCountCashCollect.java类

    package strategy;
    
    import java.math.BigDecimal;
    
    public class DisCountCashCollect extends CashCollect {
        private BigDecimal discount;
        
        public DisCountCashCollect(BigDecimal discount) {
            super();
            this.discount = discount;
        }
    
        @Override
        public BigDecimal cashCollect(BigDecimal total) {
            System.out.println(total);
            System.out.println(discount);
            return total.multiply(discount);
        }
    
    }

    NormalCashCollect.java类

    package strategy;
    
    import java.math.BigDecimal;
    
    public class NormalCashCollect extends CashCollect {
    
        @Override
        public BigDecimal cashCollect(BigDecimal total) {
            return total;
        }
    
    }

    RebateCashCollect.java类

    package strategy;
    
    import java.math.BigDecimal;
    
    public class RebateCashCollect extends CashCollect {
        private BigDecimal fullMoney;
        private BigDecimal returnMoney;
        
        public RebateCashCollect(BigDecimal fullMoney, BigDecimal returnMoney) {
            super();
            this.fullMoney = fullMoney;
            this.returnMoney = returnMoney;
        }
    
        @Override
        public BigDecimal cashCollect(BigDecimal total) {
            if(fullMoney.compareTo(total)>=0){
                total = total.subtract(returnMoney);
            }
            return total;
        }
    
    }

    CashContext.java类

    package strategy;
    
    import java.math.BigDecimal;
    
    public class CashContext {
        CashCollect cc ;
    
        /*public CashContext(CashCollect cc) {
            super();
            this.cc = cc;
        }*/
        public CashContext(String type){
            switch(type){
                case "原价":
                    cc = new NormalCashCollect();
                    break;
                case "打8折":
                    cc = new DisCountCashCollect(new BigDecimal("0.8"));
                    break;
                case "满300返100":
                    cc = new RebateCashCollect(new BigDecimal("300"), new BigDecimal("100"));
                    break;
            }
        }
        public BigDecimal cashCollect(BigDecimal total ){
            return cc.cashCollect(total);
        }
        
        
    }

    BusinessStrategy.java类

    package strategy;
    
    import java.math.BigDecimal;
    /**
     * 策略模式
     * @author 煞笔
     *
     */
    
    public class BusinessStrategy {
    
        public static void main(String[] args) {
            //BigDecimal total = new BigDecimal("1000");
            CashContext cct = new CashContext("打8折");
            //cct.total = total;
            BigDecimal total = cct.cashCollect(new BigDecimal("1000"));
            System.out.println(total);
        }
    
    }
  • 相关阅读:
    Git:本地文件到远程仓库
    logstash.conf 配置:input kafka,filter,output elasticsearch/mysql
    PowerDesigner根据Excel设计数据表结构 Excel表结构导入PowerDesigner
    VBScript PowerDesigner使用手册
    PowerDesigner导出数据表结构到Excel 一个表一个Sheet 带链接目录
    PowerDesigner导出数据表结构到Excel 所有表结构在同一个Sheet中
    Windows下如何用virtualenv创建虚拟环境
    解决ValueError: day is out of range for month的问题
    正则表达式
    移动端库和框架
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7015548.html
Copyright © 2011-2022 走看看