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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 淺談Java設(shè)計(jì)模式系列-裝飾器模式

淺談Java設(shè)計(jì)模式系列-裝飾器模式

2021-07-24 14:47唯一浩哥 Java教程

這篇文章主要介紹了Java設(shè)計(jì)模式系列-裝飾器模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、概述

裝飾器模式作用是針對(duì)目標(biāo)方法進(jìn)行增強(qiáng),提供新的功能或者額外的功能。

不同于適配器模式和橋接模式,裝飾器模式涉及的是單方,和代理模式相同,而且目標(biāo)必須是抽象的。

而實(shí)際上,裝飾器模式和代理模式的實(shí)現(xiàn)方式基本一致,只在目標(biāo)的存在上有些差別,這個(gè)后面我們具體講述。

二、初步分析

上面提到了兩點(diǎn):

  1. 涉及的是單方
  2. 目標(biāo)是抽象的

我們來想一下,所謂單方主要指的是在整個(gè)裝飾器模式中不存在雙方調(diào)用,要解決的也不是雙方調(diào)用的問題,而是解決單方提供對(duì)外服務(wù)的問題,這個(gè)單方在自行對(duì)外提供服務(wù)時(shí),功能不足,或者我們需要額外添加一些新功能,這時(shí)就可以使用裝飾器模式,來對(duì)這個(gè)單方進(jìn)行增強(qiáng)。

目標(biāo)抽象的意思是因?yàn)槲覀冃枰ㄟ^實(shí)現(xiàn)接口的方式來進(jìn)行增強(qiáng),因此目標(biāo)必須抽象為接口。

三、實(shí)例

下面我們用我們生活中的一個(gè)例子來說明,我們用房子來作為目標(biāo):
房子接口:house

?
1
2
3
4
5
6
/**
 * 目標(biāo)接口:房子
 */
public interface house {
 void output();
}

 具體的房子:donghaohouse

?
1
2
3
4
5
6
7
8
9
/**
 * 房子實(shí)現(xiàn)類
 */
public class donghaohouse implements house {
 @override
 public void output() {
  system.out.println("這是董浩的房子");
 }
}

具體的房子:donglianghouse

?
1
2
3
4
5
6
7
8
9
/**
 * 房子實(shí)現(xiàn)類
 */
public class donglianghouse implements house {
 @override
 public void output() {
  system.out.println("這是董量的房子");
 }
}

裝飾器:decorator

?
1
2
3
4
5
6
7
8
9
10
11
12
public class decorator implements house {
 private house house;
 public decorator(house house){
  this.house = house;
 }
 @override
 public void output() {
  system.out.println("這是針對(duì)房子的前段裝飾增強(qiáng)");
  house.output();
  system.out.println("這是針對(duì)房子的后段裝飾增強(qiáng)");
 }
}

測試類:

?
1
2
3
4
5
6
7
public class clienter {
 public static void main(string[] args) {
  house donghaohouse = new donghaohouse();
  house decorator = new decorator(donghaohouse);
  decorator.output();
 }
}

 執(zhí)行結(jié)果為:

 這是針對(duì)房子的前段裝飾增強(qiáng)
這是董浩的房子
這是針對(duì)房子的后段裝飾增強(qiáng)

 四、解析

通過上面的例子我們可以看出,除了測試類外,只剩下接口和實(shí)現(xiàn)類了,即使是裝飾器類也是目標(biāo)接口的一個(gè)字類,這更能說明單方的說法,模式中所有的類都屬于目標(biāo)方。至于目標(biāo)是抽象的更是如此,只有目標(biāo)是抽象的,才可以使用裝飾器模式來進(jìn)行增強(qiáng)。

上面我們說過裝飾器模式與代理模式基本相同,只存在少許差別。

我們需要從概念上了解代理和裝飾的區(qū)別:

  1. 代理是全權(quán)代理,目標(biāo)根本不對(duì)外,全部由代理類來完成。
  2. 裝飾是增強(qiáng),是輔助,目標(biāo)仍然可以自行對(duì)外提供服務(wù),裝飾器只起增強(qiáng)作用。

上面兩點(diǎn)提現(xiàn)到代碼實(shí)現(xiàn)中是這樣的:
代理模式

?
1
2
3
4
5
6
7
8
9
10
11
12
public class proxy implements house {
 private house house;
 public decorator(){
  this.house = new donghaohouse();
 }
 @override
 public void output() {
  system.out.println("這是針對(duì)目標(biāo)的前段增強(qiáng)");
  house.output();
  system.out.println("這是針對(duì)目標(biāo)的后段增強(qiáng)");
 }
}

 裝飾模式

?
1
2
3
4
5
6
7
8
9
10
11
12
public class decorator implements house {
 private house house;
 public decorator(house house){
  this.house = house;
 }
 @override
 public void output() {
  system.out.println("這是針對(duì)房子的前段裝飾增強(qiáng)");
  house.output();
  system.out.println("這是針對(duì)房子的后段裝飾增強(qiáng)");
 }
}

看出來了嗎,裝飾器中持有的目標(biāo)實(shí)例是從構(gòu)造器傳入的,而代理中持有的目標(biāo)實(shí)例是自己創(chuàng)建的。

那么這里又出現(xiàn)一個(gè)區(qū)別,代理模式和裝飾器模式雖然都依賴于目標(biāo)接口,但是代理針對(duì)的目標(biāo)實(shí)現(xiàn)類是固定的,而裝飾器模式可以隨意指定,也就是說目標(biāo)是可以自有擴(kuò)展的。

五、使用場景

裝飾器模式就是使用在對(duì)已有的目標(biāo)功能存在不足,需要增強(qiáng)時(shí),前提是目標(biāo)存在抽象接口。

六、總結(jié)

我們要明白代理模式和裝飾器模式的區(qū)別,區(qū)分二者的使用場景,如下圖:

淺談Java設(shè)計(jì)模式系列-裝飾器模式

以上所述是小編給大家介紹的java設(shè)計(jì)模式系列-裝飾器模式詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!

原文鏈接:https://www.jianshu.com/p/45fc8a521a44

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 短篇最污的乱淫伦小说全集 | 成人榴莲视频 | 金牛网155755水心论坛黄大父母 | bbbxxx乱大交欧美小说 | 久久无码AV亚洲精品色午夜麻豆 | 国产日韩精品一区二区在线观看播放 | 性吧有你 | 91交换论坛 | 窝窝色资源站 | 国产91精品在线观看 | 免费91麻豆精品国产自产在线观看 | 福利片福利一区二区三区 | 色偷偷91久久综合噜噜噜 | 欧美一区二区三区久久久 | 欧美性4khd720| 12一14性xxxxx国外 | 男人的影院 | 青青青视频免费观看 | gay帅老头毛都白了 gayxxx视频 | 国产福利微拍精品一区二区 | 日本高免费观看在线播放 | 精品亚洲欧美中文字幕在线看 | 日本精品一区二区三区 | 久久人妻少妇嫩草AV無碼 | 日b视频免费看 | 西西人体大胆啪啪私拍色约约 | 久久久久九九 | 欧美艳星kagney1ynn | 欧美日韩综合一区 | 国产主播福利在线观看 | 99久久精品免费看国产高清 | 女子监狱第二季在线观看免费完整版 | 欧美精品一区二区在线观看播放 | 亚洲精品综合网 | 无人区乱码区1卡2卡三卡在线 | 男同精品视频免费观看网站 | bt7086新片速递亚洲最新合集 | 羞羞视频麻豆 | 我和老丈洗澡同性 | 亚洲欧美在线观看首页 | 52av我爱avhaose01好 |