zoukankan      html  css  js  c++  java
  • Java设计模式之策略模式、模板模式

    对于业务代码中有多个if时,可以采用策略模式,将多个if里的算法封装为多个处理器(handler),再通过工厂方法去获取相应的处理器。

    如果if里的算法有共同特征,提取为抽象方法,handler去继承实现。

    /**
     * 打折模板
     * @author XinHai.Ma
     *
     */
    public class Discount {
    
        /**
         * 打折方法
         * @return
         */
        public String discount() {
            return null;
        }
    
    }
    /**
     * 初级会员打折策略
     * @author XinHai.Ma
     *
     */
    public class PrimaryMember extends Discount {
    
        @Override
        public String discount() {
            return "0.8";
        }
    }
    /**
     * 中级会员打折策略
     * @author XinHai.Ma
     *
     */
    public class IntermediateMember extends Discount {
    
        @Override
        public String discount() {
            return "0.7";
        }
    }
    /**
     * 高级会员打折策略
     * @author XinHai.Ma
     *
     */
    public class AdvancedMember extends Discount {
    
        @Override
        public String discount() {
            return "0.6";
        }
    
    }
    import java.math.BigDecimal;
    
    /**
     * 类描述: 价格类
     * @Author: XinHai.Ma
     * @Date: 2020/8/23 14:51
     */
    public class Price {
    
        /**
         * 打折策略对象
         */
        private Discount discount;
    
        public Price(Discount discount) {
            this.discount = discount;
        }
    
        /**
         * 计算价格
         * @param amount
         * @param discount
         * @return
         */
        public double calculation(String amount, String discount) {
            //原价
            BigDecimal originalPrice = new BigDecimal(amount);
            //会员折扣
            BigDecimal memberDiscount = new BigDecimal(discount);
            return originalPrice.multiply(memberDiscount).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
    
    }
    /**
     * 类描述: 折扣工厂
     * @Author: XinHai.Ma
     * @Date: 2020/8/23 15:05
     */
    public class DiscountFactory {
    
        private DiscountFactory() {}
    
        /**
         * 功能描述: 根据用户等级获取折扣
         * @Param: [member]
         * @Return: www.maxinhai.com.Discount
         * @Author: 15735400536
         * @Date: 2020/8/23 15:04
         */
        public static Discount getDiscount(String member) {
            Discount discount = null;
            switch (member) {
                case "普通会员":
                    discount = new PrimaryMember();
                case "中级会员":
                    discount = new IntermediateMember();
                case "高级会员":
                    discount = new AdvancedMember();
            }
            return discount;
        }
    
    }
    public class PriceDemo {
    
        public static void main(String[] args) {
    
            Discount discount = DiscountFactory.getDiscount("中级会员");
            Price price = new Price(discount);
            String amount = "216.8";
            double calculation = price.calculation(amount, discount.discount());
            System.out.println("优惠折扣: " + discount.discount());
            System.out.println("打折后价格: " + calculation);
        }
    
    }
  • 相关阅读:
    食物链(带权&种类并查集)
    抓屏工具 faststone capture
    ViewerJS 一个在浏览器上查看 PDF 和电子表格的 JavaScript 库
    html中调用本地exe应用程序
    html+css构成的框架,可自行改造
    普通人每天应该睡多长时间??
    利用PDF.JS插件解决了本地pdf文件在线浏览问题(根据需要隐藏下载功能,只保留打印功能)
    解决在IE11浏览器上,css样式不起作用的问题
    Dreamweaver cs6 的安装与破解
    博客生活第一天
  • 原文地址:https://www.cnblogs.com/mxh-java/p/13549285.html
Copyright © 2011-2022 走看看