一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java設計模式之裝飾者模式詳解和代碼實例

Java設計模式之裝飾者模式詳解和代碼實例

2019-11-28 14:27junjie JAVA教程

這篇文章主要介紹了Java設計模式之裝飾者模式詳解和代碼實例,Decorator模式(別名Wrapper):動態將職責附加到對象上,若要擴展功能,裝飾者提供了比繼承更具彈性的代替方案,需要的朋友可以參考下

裝飾者模式可以給已經存在的對象動態的添加能力。下面,我將會用一個簡單的例子來演示一下如何在程序當中使用裝飾者模式。

1.裝飾者模式

讓我們來假設一下,你正在尋找一個女朋友。有很多來自不同國家的女孩,比如:美國,中國,日本,法國等等,他們每個人都有不一樣的個性和興趣愛好,如果需要在程序當中模擬這么一種情況的話,假設每一個女孩就是一個Java類的話,那么就會有成千上萬的類,這樣子就會造成類的膨脹,而且這樣的設計的可擴展性會比較差。因為如果我們需要一個新的女孩,就需要創建一個新的Java類,這實際上也違背了在程序開發當中需要遵循的OCP(對擴展開放,對修改關閉)原則。
讓我們來重新做另外一種設計,讓每一種個性或者興趣愛好成為一種裝飾從而可以動態地添加到每一個女孩的身上。

2.類圖結構

Java設計模式之裝飾者模式詳解和代碼實例

3.裝飾者模式示例代碼

Girl.java

 

復制代碼代碼如下:


public abstract class Girl {
 String description = "no particular";

 

 public String getDescription(){
  return description;
 }
}

 

AmericanGirl.java

 

復制代碼代碼如下:


public class AmericanGirl extends Girl {

 

 public AmericanGirl() {
  description = "+American";
 }

}

 

EuropeanGirl.java

 

復制代碼代碼如下:


public class EuropeanGirl extends Girl {

 

 public EuropeanGirl(){
  description = "+European";
 }

}

 

GirlDecorator.java

 

復制代碼代碼如下:


public abstract class GirlDecorator extends Girl {

 

 public abstract String getDescription();

}

 

Science.java

 

復制代碼代碼如下:


public class Science extends GirlDecorator {

 

 private Girl girl;

 public Science(Girl girl){
  this.girl = girl;
 }

 @Override
 public String getDescription() {
  return this.girl.getDescription() + "+Like Science";
 }

 public void caltulateStuff() {
  System.out.println("scientific calculation!");
 }
}

 

Art.java

 

復制代碼代碼如下:


public class Art extends GirlDecorator {

 

 private Girl girl;

 public Art(Girl girl){
  this.girl = girl;
 }

 @Override
 public String getDescription() {
  return this.girl.getDescription() + "+Like Art";
 }

 public void draw() {
  System.out.println("draw pictures!");
 }
}

 

Main.java

 

復制代碼代碼如下:


public class Main {

 

 public static void main(String[] args) {
  //普通美國女孩
  Girl g1 = new AmericanGirl();
  System.out.println(g1.getDescription());

  //喜歡科學的
  Science g2 = new Science(g1);
  System.out.println(g2.getDescription());

  //喜歡藝術的
  Art g3 = new Art(g2);
  System.out.println(g3.getDescription());
 }

}

 

4.裝飾者模式在JDK中的運用

Java當中的IO是運用了裝飾者模式的最典型的例子。

下面是一個簡單的例子,通過BufferedReader對象來裝飾InputStreamReader對象:

復制代碼代碼如下:

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
//System.in is an InputStream object

 

(全文完)

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产欧美日韩精品一区二 | 国产v在线在线观看羞羞答答 | 亚洲精品成人在线 | 狠狠干在线观看 | 无限观看社区在线视频 | 国产51页| 外女思春台湾三级 | 污到湿的爽文免费阅读 | 欧美娇小性xxxx | 海角社区在线登录 | 波多野结衣 在线 | 91大神在线观看精品一区 | 男人天堂色 | 成人免费体验区福利云点播 | 别停好爽好深好大好舒服视频 | 网址在线观看你懂我意思吧免费的 | 性色xxx| 天堂网在线网站成人午夜网站 | 成人午夜毛片 | 免费观看一级欧美在线视频 | 欧美精品99久久久久久人 | 叉逼视频| 农夫69小说小雨与农村老太 | 香蕉eeww99国产精选播放 | 欧美国产日本精品一区二区三区 | 精品视频免费在线观看 | 亚洲29p | 天美传媒影视在线免费观看 | 美女把小内内脱个精光打屁屁 | 国产成人免费视频 | 亚洲swag精品自拍一区 | 国产精品最新资源网 | 欧美大片一区二区 | 91麻豆网址 | 欧美乱码视频 | 肉浦团在线观看 | 精品久久香蕉国产线看观看亚洲 | 黑人巨 | 香蕉精品高清在线观看视频 | 本土自拍 | 日韩一区三区 |