生活随笔
收集整理的這篇文章主要介紹了
java模式之装饰模式
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 什么叫裝飾模式? 根據(jù)業(yè)務(wù)的需求,需要對(duì)一個(gè)類的方法進(jìn)行增強(qiáng)的處理。
?
2. 為什么需要裝飾模式?
拓展性更加的好,當(dāng)覺(jué)得這個(gè)裝飾不好的時(shí)候,可以直接拿下,不需要改變?nèi)魏蔚拇a。
?
3. 裝飾模式的一個(gè)具體的應(yīng)用??? 電子發(fā)票系統(tǒng)
代碼:
package com.huxin.decorator.test;
import java.util.Date;
import java.util.Vector;abstract public class Order {private String name;private Date date ;private Vector itemsLinelist = new Vector(10);public Order(){System.out.println("調(diào)用order的構(gòu)造方法");}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public double getTotalPrice() {double price = 0.0d;for(int i =0 ;i<itemsLinelist.size();i++){ItemsLine itemsLine = (ItemsLine)itemsLinelist.get(i);price +=itemsLine.getSubTotalPrice();}return price;}public void addItems(ItemsLine itemsLine){itemsLinelist.add(itemsLine);}public void removeItems(ItemsLine itemsLine){itemsLinelist.remove(itemsLine);}public void print(){
System.out.println("order==================================================");for(int i =0 ;i<itemsLinelist.size();i++){ItemsLine itemsLine = (ItemsLine)itemsLinelist.get(i);itemsLine.print();}}
}
?
package com.huxin.decorator.test;public class SalsOrder extends Order {public SalsOrder(){System.out.println("調(diào)用SalsOrder的構(gòu)造方法");}public void print(){super.print();}
}
?
package com.huxin.decorator.test;public class ItemsLine {private String itemsName;private double unit ;private int number;private double subTotalPrice;public String getItemsName() {return itemsName;}public void setItemsName(String itemsName) {this.itemsName = itemsName;}public double getUnit() {return unit;}public void setUnit(double unit) {this.unit = unit;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}public double getSubTotalPrice() {return number * unit;}public void print(){System.out.println("購(gòu)買商品的名字為:"+ itemsName+ "單價(jià)為:"+ unit+ "數(shù)量為"+ number);}
}
?
package com.huxin.decorator.test;abstract public class AbstractDecorator extends Order{protected Order order; //裝飾類必須接受這個(gè)order對(duì)象public AbstractDecorator(Order order){this.order = order;this.setDate(order.getDate());this.setName(order.getName());}public void print(){super.print();}
}
?
package com.huxin.decorator.test;public class FootDecorator extends AbstractDecorator {//裝飾類必須接受這個(gè)order對(duì)象public FootDecorator(Order order){super(order);
System.out.println("我后被創(chuàng)建FootDecorator");}public void print(){order.print();printFooter();}public void printFooter(){
System.out.println("foot==================================================");System.out.println("總價(jià)格為:"+ super.order.getTotalPrice());}
}
?
package com.huxin.decorator.test;public class HeaderDecorator extends AbstractDecorator {//裝飾類必須接受這個(gè)order對(duì)象public HeaderDecorator(Order order){super(order);
System.out.println("我先被創(chuàng)建HeaderDecorator");}public void print(){printHeader();super.order.print();}public void printHeader(){
System.out.println("header==================================================");System.out.println("顧客的姓名為:"+ super.order.getName() +"日期為:"+ super.order.getDate());}
}
?
package com.huxin.decorator.test;import java.util.Date;public class Client {private static Order order;public static void main(String[] args) {order = new SalsOrder();ItemsLine itemsLine = new ItemsLine();itemsLine.setItemsName("杯子");itemsLine.setUnit(8.0d);itemsLine.setNumber(1);ItemsLine itemsLine2 = new ItemsLine();itemsLine2.setItemsName("瘋狂java");itemsLine2.setUnit(610d);itemsLine2.setNumber(2);order.addItems(itemsLine2);order.addItems(itemsLine);order.setDate(new Date());order.setName("胡鑫");order= new HeaderDecorator(new FootDecorator(order));order.print();}
}
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/jiangu66/p/3165477.html
總結(jié)
以上是生活随笔 為你收集整理的java模式之装饰模式 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。