日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式第三集——装饰者模式(Decorator)

發布時間:2024/7/19 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式第三集——装饰者模式(Decorator) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  再次強調設計的重要原則:對擴展開放,對修改關閉。在設計中要盡量避免對之前源代碼的修改。

  為適應擴展的特性,除了繼承之外,還可以用裝飾者模式:動態的將新的功能附加到對象上。換句話說,裝飾者模式就是有一群裝飾者類,這些類包裹起具體的組件。在java中,最典型的裝飾者模式就是java I/O

?

?FileInputStream是被包裝的組件,有最基本的讀取字節的功能。BufferInputStream是一個具體的裝飾者,它加入了兩種新的行為:readLine()和緩沖輸入;LineNumberInputstream也是一個具體的裝飾者它在BufferInputStream之上又加入了計算行數的功能。

  具體例子:咖啡館訂單系統。咖啡館有多款咖啡,例如HouseBllend、DarkRoast;顧客在購買咖啡時經常要求在咖啡中加上各種調料例如Streamed Milk,Mocha。根據客戶不同的要求收取不同的費用。

  UML圖:調料類CondimentDecortor是飲料類Beverage的裝飾類。在裝飾類的兩種調料中,有一個實例變量Beverage,用它來記錄需要包裹的實例。注意:最終的結果是經過裝飾類包裝之后的類,也就是說裝飾類可以取代Beverage,所以裝飾類CondimentDecortor必須繼承自Beverage

飲料?Beverage

1 package com.coffee; 2 3 public abstract class Beverage { 4 protected String description="Unknown Beverage"; 5 protected int Size;//1:小杯 2:中杯 3:大杯 6 7 public String getDescription() { 8 return description; 9 } 10 11 public int getSize() { 12 return Size; 13 } 14 15 public abstract double cost();//cost在子類中實現 16 17 18 }

HouseBlend咖啡具體實現飲料類

1 package com.coffee; 2 3 public class HouseBlend extends Beverage{ 4 public HouseBlend(int size) { 5 description="HouseBlend"; 6 Size=size; 7 if(getSize()==1){ 8 description+="Small"; 9 }else if(getSize()==2){ 10 description+="Middle"; 11 }else if(getSize()==3){ 12 description+="Large"; 13 } 14 } 15 16 public double cost() { 17 double Cost=1.99; 18 if(getSize()==1){ 19 Cost+=1.0; 20 }else if(getSize()==2){ 21 Cost+=2.0; 22 }else if(getSize()==3){ 23 Cost+=3.0; 24 } 25 return Cost; 26 } 27 28 }

調料裝飾類CondimentDecorator

1 package com.condiment; 2 3 import com.coffee.Beverage; 4 5 public abstract class CondimentDecorator extends Beverage { 6 public abstract String getDescription(); 7 public abstract int getSize(); 8 9 }

Mocha調料實現CondimentDecorator

1 package com.condiment; 2 3 import com.coffee.Beverage; 4 5 public class Mocha extends CondimentDecorator{ 6 Beverage beverage; 7 8 public Mocha(Beverage beverage) { 9 this.beverage = beverage; 10 } 11 12 public int getSize(){ 13 return Size; 14 } 15 16 public String getDescription() { 17 // TODO Auto-generated method stub 18 String order="Order:"; 19 if(getSize()==1){ 20 order+="Small"; 21 }else if(getSize()==2){ 22 order+="Middle"; 23 }else if(getSize()==3){ 24 order+="Large"; 25 } 26 return order+beverage.getDescription()+",Mocha"; 27 } 28 29 30 public double cost() { 31 // TODO Auto-generated method stub 32 double cost=beverage.cost()+.20;//取得之前飲料的加個加上摩卡的加個.20 33 if(getSize()==1){ 34 cost+=1.0; 35 }else if(getSize()==2){ 36 cost+=2.0; 37 }else if(getSize()==3){ 38 cost+=3.0; 39 } 40 return cost; 41 } 42 43 }

?

轉載于:https://www.cnblogs.com/doublesong/archive/2012/07/30/2614984.html

總結

以上是生活随笔為你收集整理的设计模式第三集——装饰者模式(Decorator)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。