/** * 版權所有 2022 塗聚文有限公司 * 許可信息查看: * 描述: * 裝飾模式 Decorator Patterns * 歷史版本: JDK 14.02 * 2022-09-12 創建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:d ...
/** * 版權所有 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
哲學管理(學)人生, 文學藝術生活, 自動(電腦學)物理(學)工作, 生物(學)化學逆境, 歷史(學)測繪(學)時間, 經濟(學)數學金錢(理財), 心理(學)醫學情緒, 詩詞美容情感, 美學建築(學)家園, 解構建構(分析)整合學習, 智商情商(IQ、EQ)運籌(學)成功.---Geovin Du(塗聚文)