日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
巧妙的運(yùn)用裝飾器,讓你的代碼高出一個(gè)逼格!

一、介紹

裝飾器模式,顧名思義,就是在一個(gè)類(lèi)上增加功能,以起到裝飾的作用。

創(chuàng)新互聯(lián)企業(yè)建站,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),專(zhuān)注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁(yè)設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營(yíng)經(jīng)驗(yàn),設(shè)計(jì)師為客戶(hù)打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢(xún)和貼心的售后服務(wù)。對(duì)于網(wǎng)站建設(shè)、成都網(wǎng)站制作中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶(hù)行業(yè)的需求,以靈動(dòng)的思維在網(wǎng)頁(yè)中充分展現(xiàn),通過(guò)對(duì)客戶(hù)行業(yè)精準(zhǔn)市場(chǎng)調(diào)研,為客戶(hù)提供的解決方案。

我們都知道,如果想給某個(gè)類(lèi)新增功能,但又要避免在原類(lèi)上修改代碼,最常用的方式就是新增一個(gè)類(lèi)來(lái)繼承目標(biāo)類(lèi),但是如果增加多的話(huà),會(huì)使類(lèi)的數(shù)量爆炸式增長(zhǎng),為管理帶來(lái)巨大的麻煩,裝飾器模式就比較好地解決了這一點(diǎn)。

從設(shè)計(jì)的角度看,裝飾器模式涉及到四個(gè)角色:

  • 被裝飾類(lèi):要進(jìn)行擴(kuò)展的源類(lèi);
  • 裝飾器類(lèi):通過(guò)該類(lèi)可以給被裝飾類(lèi)動(dòng)態(tài)添加額外的方法,多以抽象為主;
  • 具體的裝飾類(lèi):該類(lèi)實(shí)現(xiàn)自裝飾器類(lèi),已完成完整的算法;
  • 客戶(hù)角色:客戶(hù)類(lèi)提出使用具體類(lèi)的請(qǐng)求;

今天我們一起來(lái)看看深度了解一下裝飾器的玩法!

二、代碼示例

下面以生產(chǎn)一件衣服為例,一塊布料裁剪好了之后做出的衣服樣子還可以,但是這樣的衣服是賣(mài)不出去的,因?yàn)楹翢o(wú)美感,因此我們需要通過(guò)一些裝飾來(lái)使衣服變得好看。

我們先來(lái)創(chuàng)建一個(gè)抽象類(lèi)或者接口,定義一個(gè)骨架,如下:

 
 
 
 
  1. /** 
  2.  * 建立基本骨架 
  3.  */ 
  4. public interface Clothes { 
  5.  
  6.     void makeClothes(); 

接著創(chuàng)建一個(gè)我們需要裝飾的源類(lèi),如下:

 
 
 
 
  1. /** 
  2.  * 被裝飾類(lèi) 
  3.  */ 
  4. public class MakeClothes implements Clothes { 
  5.  
  6.     @Override 
  7.     public void makeClothes() { 
  8.         System.out.println("制作一件衣服"); 
  9.     } 

再來(lái)創(chuàng)建我們的主角,裝飾類(lèi),如下:

 
 
 
 
  1. /** 
  2.  * 裝飾類(lèi) 
  3.  */ 
  4. public class Decorator implements Clothes { 
  5.  
  6.     private Clothes clothes; 
  7.  
  8.     public Decorator(Clothes clothes) { 
  9.         this.clothes = clothes; 
  10.     } 
  11.  
  12.     @Override 
  13.     public void makeClothes() { 
  14.         clothes.makeClothes(); 
  15.     } 
  16.  

最后,分別創(chuàng)建兩個(gè)具體的裝飾類(lèi),如下:

 
 
 
 
  1. /** 
  2.  * 具體的裝飾類(lèi) 
  3.  */ 
  4. public class EmbroideryDecorator extends Decorator { 
  5.  
  6.  
  7.     public EmbroideryDecorator(Clothes clothes) { 
  8.         super(clothes); 
  9.     } 
  10.  
  11.     @Override 
  12.     public void makeClothes() { 
  13.         super.makeClothes(); 
  14.         System.out.println("給衣服繡制花朵"); 
  15.     } 

 
 
 
 
  1. /** 
  2.  * 具體的裝飾類(lèi) 
  3.  */ 
  4. public class MickeyDecorator extends Decorator { 
  5.  
  6.  
  7.     public MickeyDecorator(Clothes clothes) { 
  8.         super(clothes); 
  9.     } 
  10.  
  11.     @Override 
  12.     public void makeClothes() { 
  13.         super.makeClothes(); 
  14.         System.out.println("給衣服繪制米老鼠圖案"); 
  15.     } 

怎么用呢?請(qǐng)看下面的測(cè)試類(lèi):

 
 
 
 
  1. /** 
  2.  * 客戶(hù)端 
  3.  */ 
  4. public class DecorateClient { 
  5.  
  6.     public static void main(String[] args) { 
  7.         Clothes clothes = new MakeClothes(); 
  8.         clothes = new EmbroideryDecorator(clothes);//給衣服繡花 
  9.         clothes = new MickeyDecorator(clothes);//給衣服添加米老鼠圖案 
  10.         clothes.makeClothes(); 
  11.         System.out.println("成品已經(jīng)完成!"); 
  12.     } 

輸出結(jié)果如下:

 
 
 
 
  1. 制作一件衣服 
  2. 給衣服繡制花朵 
  3. 給衣服繪制米老鼠圖案 
  4. 成品已經(jīng)完成 

制作一件衣服給衣服繡制花朵給衣服繪制米老鼠圖案成品已經(jīng)完成

從結(jié)果上,可以看到,我們成功的給MakeClothes這個(gè)類(lèi),動(dòng)態(tài)添加了2個(gè)方法,一個(gè)是給衣服繡花,另一個(gè)是給衣服添加米老鼠圖案,最后成品完成!

可見(jiàn)裝飾的效果還不錯(cuò)~

三、應(yīng)用

其實(shí)在 jdk 中,裝飾者設(shè)計(jì)模式也有很多典型的場(chǎng)景應(yīng)用,例如我們熟悉的io包中的字節(jié)輸入、輸出流,就用到了裝飾者設(shè)計(jì)模式!

其中FilterInputStream、FilterOutputStream就是裝飾類(lèi),用于動(dòng)態(tài)給輸入、輸出流增加方法!

四、總結(jié)

巧妙采用裝飾器模式,可以很好的解決類(lèi)繼承數(shù)量過(guò)多的問(wèn)題,讓代碼清晰可讀。

但是如果裝飾層數(shù)過(guò)多,也會(huì)影響到代碼的維護(hù),因此在實(shí)際的使用過(guò)程中,還需靈活使用!


文章標(biāo)題:巧妙的運(yùn)用裝飾器,讓你的代碼高出一個(gè)逼格!
新聞來(lái)源:http://www.5511xx.com/article/cohiopp.html