/**
* 著作權所有 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(涂聚文)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/508927.html
標籤:其他
上一篇:如何制作驗證碼
下一篇:裝飾器的使用
