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

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

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

 

(全文完)

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人福利 | 操闺蜜 | 男人操美女视频 | 91色爱| 腿交hd| 深夜在线观看网站 | 精品91一区二区三区 | 91制片厂果冻星空传媒3xg | 久久亚洲精品中文字幕60分钟 | 男女乱淫真视频播放网站 | 青青草原在线免费 | 精品一区二区三区高清免费观看 | 91中文在线 | 深夜免费在线观看 | bt天堂在线观看国产 | 久久99热狠狠色AV蜜臀 | 国产成人在线免费观看 | 成人特级毛片69免费观看 | 免费观看一级一片 | 亚洲卡一卡2卡三卡4麻豆 | 好奇害死猫在线观看 | 午夜精品久久久久久中宇 | 欧美高清免费一级在线 | 免费人成在线观看69式小视频 | ak福利影院 | 国产91精选在线观看麻豆 | 成人黄色a级片 | 国产999在线观看 | 美女视频黄a | 亚洲天堂男人网 | 99精品免费视频 | 色男人网 | 四虎永久在线精品波多野结衣 | 亚洲a视频在线观看 | 成人高辣h视频一区二区在线观看 | 精品国产乱码久久久久久免费流畅 | 日本mature乱子视频 | 国产成人福利免费观看 | 国产成人高清精品免费5388密 | 日本视频观看 | 国产精品俺来也在线观看了 |