激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

 

(全文完)

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一级免费特黄视频 | 一区二区三区四区高清视频 | 逼片| 最新中文字幕在线 | 久久综合九色综合久久久精品综合 | 成人男女视频 | 四虎久草 | 免费色片| 免费嗨片首页中文字幕 | 午夜精品视频免费观看 | 免费观看黄视频 | av噜噜噜噜 | 91资源在线观看 | 欧美激情精品久久久久久黑人 | 欧美日韩亚洲在线观看 | 国产乱淫av片免费观看 | 日本一区二区久久久 | 黄色网页在线观看 | 精品久久久久久国产三级 | 成人黄色免费网站 | 成年人黄色免费网站 | a免费视频 | 亚洲欧美日韩在线 | av电影在线观看网址 | 成人精品免费在线观看 | 人人舔人人射 | 久久精品小短片 | 久在线观看福利视频69 | 老a影视网站在线观看免费 国产精品久久久久久久久久尿 | 久久不射电影 | 国产高潮好爽受不了了夜色 | 精品在线观看一区二区 | 高清av在线| 久久精品国产清自在天天线 | 主人在调教室性调教女仆游戏 | 国内成人自拍视频 | 国产91九色视频 | 亚洲极色| 一级做人爱c黑人影片 | 欧美成人小视频 | 精国品产一区二区三区有限公司 |