• java: Decorator Pattern


    /**
     * 版权所有 2022 涂聚文有限公司
     * 许可信息查看:
     * 描述:
     * 装饰模式 Decorator Patterns
     * 历史版本: JDK 14.02
     * 2022-09-12 创建者 geovindu
     * 2022-09-12 添加 Lambda
     * 2022-09-12 修改:date
     * 接口类
     * 2022-09-12 修改者:Geovin Du
     * 生成API帮助文档的指令:
     *javadoc - -encoding Utf-8 -d apidoc OrderLine.java
     *
     * */
    
    package com.javapatterns.decorator;
    
    import java.text.NumberFormat;
    /**
     *具体类
     * 货物清单
     * @author geovindu
     *
     * */
    public class OrderLine {
    
        private String itemName;
        private int units;
        private double unitPrice;
        /**
         *产品名取值方法
         * @return
         * */
        public String getItemName()
        {
            return itemName;
        }
        /**
         *产品名赋值方法
         * @param itemName
         *
         * */
        public void setItemName(String itemName)
        {
            this.itemName = itemName;
        }
        /**
         *单位数量的取值方法
         * @return
         *
         * */
        public int getUnits()
        {
            return units;
        }
        /**
         *单位数量的赋值方法
         * @param units 单位数量
         *
         * */
        public void setUnits(int units)
        {
            this.units = units;
        }
        /**
         *单价的取值 方法
         * @return
         *
         * */
        public double getUnitPrice()
        {
            return unitPrice;
        }
        /**
         *单价的赋值 方法
         * @param unitPrice
         *
         * */
        public void setUnitPrice(double unitPrice)
        {
            this.unitPrice = unitPrice;
        }
        /**
         *打印订单方法
         *
         * */
        public void printLine()
        {
            System.out.println(itemName + "\t" + units
                    + "\t" + formatCurrency(unitPrice)
                    + "\t" + formatCurrency(getSubtotal()));
        }
        /**
         *小计金额取值方法
         * @return
         *
         * */
        public double getSubtotal()
        {
            return unitPrice * units;
        }
        /**
         *工具方法 将金额格式化
         * @param amnt
         * @return
         *
         * */
        private String formatCurrency(double amnt)
        {
            return NumberFormat.getCurrencyInstance().format(amnt);
        }
    
    
    }
    

      

    /**
     * 版权所有 2022 涂聚文有限公司
     * 许可信息查看:
     * 描述:
     * 装饰模式 Decorator Patterns
     * 历史版本: JDK 14.02
     * 2022-09-12 创建者 geovindu
     * 2022-09-12 添加 Lambda
     * 2022-09-12 修改:date
     * 接口类
     * 2022-09-12 修改者:Geovin Du
     * 生成API帮助文档的指令:
     *javadoc - -encoding Utf-8 -d apidoc Order.java
     *
     * */
    
    package com.javapatterns.decorator;
    
    import java.util.Date;
    import java.util.Vector;
    import java.text.NumberFormat;
    
    /**
     *抽象类
     * @author geovindu
     *
     * */
    abstract  public class Order {
    
        private OrderLine lnkOrderLine;
        protected String customerName;
        protected Date salesDate;
        protected Vector items = new Vector(10);
        /**
         *打印方法
         *
         * */
        public void print()
        {
            for (int i = 0 ; i < items.size() ; i++)
            {
                OrderLine item = (OrderLine) items.get(i);
                item.printLine();
            }
        }
        /**
         *客户名取值方法
         * @return  返回客户名
         * */
        public String getCustomerName()
        {
            return customerName;
        }
        /**
         *客户名赋值方法
         * @param customerName 输入客户名
         * */
        public void setCustomerName(String customerName)
        {
            this.customerName = customerName;
        }
        /**
         *返回销售日期
         * @return  返回售销日期
         * */
        public Date getSalesDate()
        {
            return salesDate;
        }
        /**
         *赋值销售日期
         * @param salesDate  输入售销日期
         * */
        public void setSalesDate(Date salesDate)
        {
            this.salesDate = salesDate;
        }
        /**
         *增加一行销销售产品
         * @param item
         *
         * */
        public void addItem(OrderLine item)
        {
            items.add(item);
        }
        /**
         *删除一行销售产品
         * @param item
         *
         * */
        public void remoteItem(OrderLine item)
        {
            items.remove(item);
        }
        /**
         *返还总额
         * @return
         *
         * */
        public double getGrandTotal()
        {
            double amnt = 0.0D;
    
            for (int i = 0 ; i < items.size() ; i++)
            {
                OrderLine item = (OrderLine) items.get(i);
                amnt += item.getSubtotal();
            }
    
            return amnt;
        }
        /**
         *工具方法  将金额格式化
         * @param amnt 输入数量
         * @return 返回格式化的数据
         *
         * */
        protected String formatCurrency(double amnt)
        {
            return NumberFormat.getCurrencyInstance().format(amnt);
        }
    
    }
    

      

    /**
     * 版权所有 2022 涂聚文有限公司
     * 许可信息查看:
     * 描述:
     * 装饰模式 Decorator Patterns
     * 历史版本: JDK 14.02
     * 2022-09-12 创建者 geovindu
     * 2022-09-12 添加 Lambda
     * 2022-09-12 修改:date
     * 接口类
     * 2022-09-12 修改者:Geovin Du
     * 生成API帮助文档的指令:
     *javadoc - -encoding Utf-8 -d apidoc SalesOrder.java
     *
     * */
    
    
    package com.javapatterns.decorator;
    /**
     *具体类
     * @author geovindu
     *
     * */
    public class SalesOrder extends Order{
        /**
         *构造
         * */
        public SalesOrder() {
        }
        /**
         *打印
         *
         * */
        public void print()
        {
            super.print();
        }
    
    }
    

      

    /**
     * 版权所有 2022 涂聚文有限公司
     * 许可信息查看:
     * 描述:
     * 装饰模式 Decorator Patterns
     * 历史版本: JDK 14.02
     * 2022-09-12 创建者 geovindu
     * 2022-09-12 添加 Lambda
     * 2022-09-12 修改:date
     * 接口类
     * 2022-09-12 修改者:Geovin Du
     * 生成API帮助文档的指令:
     *javadoc - -encoding Utf-8 -d apidoc OrderDecorator.java
     *
     * */
    
    
    package com.javapatterns.decorator;
    /**
     *抽象装饰类
     * @author geovindu
     *
     * */
    abstract public class OrderDecorator  extends Order{
    
        protected Order order;
        /**
         * 构造
         * */
        public OrderDecorator(Order order)
        {
            this.order = order;
            this.setSalesDate( order.getSalesDate() );
            this.setCustomerName( order.getCustomerName() );
        }
        /**
         *
         * */
        public void print()
        {
            super.print();
        }
    
    
    }
    

     

    /**
     * 版权所有 2022 涂聚文有限公司
     * 许可信息查看:
     * 描述:
     * 装饰模式 Decorator Patterns
     * 历史版本: JDK 14.02
     * 2022-09-12 创建者 geovindu
     * 2022-09-12 添加 Lambda
     * 2022-09-12 修改:date
     * 接口类
     * 2022-09-12 修改者:Geovin Du
     * 生成API帮助文档的指令:
     *javadoc - -encoding Utf-8 -d apidoc HeaderDecorator.java
     *
     * */
    
    
    package com.javapatterns.decorator;
    /**
     *抽象装饰类 打印页头
     * @author geovindu
     * */
    public class HeaderDecorator extends OrderDecorator{
        /**
         *
         * */
        public HeaderDecorator(Order anOrder)
        {
            super(anOrder);
        }
        /**
         *
         * */
        public void print()
        {
            this.printHeader();
            super.order.print();
        }
        /**
         *打印页头
         *
         * */
        private void printHeader()
        {
            System.out.println("\t***\t售销单\t***\n缔友超市售销清单\n销售日期: "
                    + order.getSalesDate());
            System.out.println("========================================================");
            System.out.println("产品名称\t\t数量\t单价\t合计");
        }
    
    }
    

      

    /**
     * 版权所有 2022 涂聚文有限公司
     * 许可信息查看:
     * 描述:
     * 装饰模式 Decorator Patterns
     * 历史版本: JDK 14.02
     * 2022-09-12 创建者 geovindu
     * 2022-09-12 添加 Lambda
     * 2022-09-12 修改:date
     * 接口类
     * 2022-09-12 修改者:Geovin Du
     * 生成API帮助文档的指令:
     *javadoc - -encoding Utf-8 -d apidoc FooterDecorator.java
     *
     * */
    
    
    package com.javapatterns.decorator;
    
    import java.text.NumberFormat;
    
    /**
     *抽象装饰类 打印页层
     * @author geovindu
     *
     * */
    public class FooterDecorator extends OrderDecorator{
        /**
         *
         * */
        public FooterDecorator(Order anOrder)
        {
            super(anOrder);
        }
        /**
         *
         * */
        public void print()
        {
            super.order.print();
            printFooter();
        }
        /**
         *打印页层
         *
         * */
        private void printFooter()
        {
    
            System.out.println("========================================================");
            System.out.println("总额:\t\t\t\t" +
                    formatCurrency(super.order.getGrandTotal()));
        }
    
    }
    

      

    调用测试:

                //装饰模式
                order = new SalesOrder();
                order.setSalesDate(new Date());
                order.setCustomerName("捷为工作室");
    
                OrderLine line1 = new OrderLine();
    
                line1.setItemName("涂氏PDA");
                line1.setUnitPrice(154.23);
                line1.setUnits(4);
    
                order.addItem(line1);
    
                OrderLine line2 = new OrderLine();
    
                line2.setItemName("RFID读写器");
                line2.setUnitPrice(300.45);
                line2.setUnits(1);
    
                order.addItem(line2);
    
                order = new HeaderDecorator(new FooterDecorator(order));
    
                order.print();
    

      

    输出:

    	***	售销单	***
    缔友超市售销清单
    销售日期: Sat Sep 17 14:11:55 CST 2022
    ========================================================
    产品名称		数量	单价	合计
    涂氏PDA		4	¥154.23	¥616.92
    RFID读写器		1	¥300.45	¥300.45
    ========================================================
    总额:				¥917.37
    

      

  • 相关阅读:
    Wannafly #4 F 线路规划
    PKUWC2018 随机算法
    noip模拟赛
    php 正则判断是否是手机号码 最新
    Onethink上传服务器后登录不了的问题
    【php中的curl】php中curl的详细解说
    50种网站引流量方式
    mysql ERROR 1045 (28000): 错误解决办法
    织梦DEDE分类信息实现联动筛选(支持多条件多级选项)解决方案
    dedecms新增联动类别后的使用方法
  • 原文地址:https://www.cnblogs.com/geovindu/p/16702513.html
Copyright © 2020-2023  润新知