国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務(wù)器之家 - 編程語言 - Java教程 - Java設(shè)計(jì)模式之裝飾模式原理與用法實(shí)例詳解

Java設(shè)計(jì)模式之裝飾模式原理與用法實(shí)例詳解

2021-04-24 10:57aronykl Java教程

這篇文章主要介紹了Java設(shè)計(jì)模式之裝飾模式原理與用法,結(jié)合實(shí)例形式詳細(xì)分析了裝飾模式的概念、原理、定義與使用方法,并總結(jié)分析了裝飾模式的優(yōu)缺點(diǎn),具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了java設(shè)計(jì)模式裝飾模式原理與用法。分享給大家供大家參考,具體如下:

裝飾模式能在不必改變?cè)愇募褪褂美^承的情況下,動(dòng)態(tài)地?cái)U(kuò)展一個(gè)對(duì)象的功能。它是通過創(chuàng)建一個(gè)包裝對(duì)象,也就是裝飾來包裹真實(shí)的對(duì)象。jdk中io的設(shè)計(jì)就用到了裝飾模式,通過過濾流對(duì)節(jié)點(diǎn)流進(jìn)行包裝來實(shí)現(xiàn)功能的擴(kuò)展。

裝飾模式的角色的組成:

抽象構(gòu)件(component)角色:給出一個(gè)抽象接口,以規(guī)范準(zhǔn)備接收附加工功能的對(duì)象。(inputstream、outputstream)
具體構(gòu)件(concrete component)角色:定義一個(gè)將要接收附加功能的類。(節(jié)點(diǎn)流)
裝飾(decorator)角色:持有一個(gè)構(gòu)件(component)對(duì)象的實(shí)例,并實(shí)現(xiàn)一個(gè)與抽象構(gòu)件接口一致的接口。(過濾流filterinputstream、filteroutputstream)
具體裝飾(concrete decorator)角色:負(fù)責(zé)給構(gòu)件對(duì)象添加上附加的功能。(帶具體附加功能的過濾流,bufferedinputstream,datainputstream等)

以下給出一個(gè)裝飾模式的簡單的例子:

1. 抽象構(gòu)件角色:定義一個(gè)接口component

?
1
2
3
4
5
package com.tydic.decorator;
//抽象構(gòu)件角色
public interface component {
  public void dosomething();
}

2. 具體構(gòu)建角色:需要實(shí)現(xiàn)抽象構(gòu)件角色,可以給這個(gè)對(duì)象添加一些職責(zé)。

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.tydic.decorator;
/**
 * 具體構(gòu)建角色,實(shí)現(xiàn)抽象構(gòu)建角色
 * @author administrator
 *
 */
public class concretecomponent implements component {
  @override
  public void dosomething() {
    system.out.println("功能a");
  }
}

3. 裝飾角色:持有一個(gè)對(duì)象構(gòu)建角色的引用,并且實(shí)現(xiàn)抽象構(gòu)件角色。實(shí)現(xiàn)抽象構(gòu)件角色是因?yàn)橐WC增加了功能過后,類型不能發(fā)生改變,就像filterinputstream還是一個(gè)輸入流,仍然帶有輸入流的特性。而持有一個(gè)對(duì)象構(gòu)建角色的引用是因?yàn)橐朐黾庸δ埽捅仨毘钟幸桓郊庸δ艿臉?gòu)件角色的引用。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.tydic.decorator;
/**
 * 裝飾角色,持有一個(gè)構(gòu)件角色的引用,并且實(shí)現(xiàn)構(gòu)件角色
 * 要想增加功能過后還是這個(gè)類型的構(gòu)件就必須實(shí)現(xiàn)構(gòu)件角色,要想增加功能,就必須持有要被附加功能的構(gòu)件角色的引用,這就是為什么必須持有一個(gè)構(gòu)件角色的引用
 * @author administrator
 *
 */
public class decorator implements component {
  private component component;//這是要被附加功能的構(gòu)件角色,可通過實(shí)例化的時(shí)候傳進(jìn)來
  public decorator(component component) {
    this.component = component;
  }
  @override
  public void dosomething() {
    component.dosomething();
  }
}

4. 具體裝飾角色:需要繼承裝飾角色,并且給出要附加的功能

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.tydic.decorator;
/**
 * 具體裝飾角色1,需要繼承裝飾角色,并且給出要附加的功能
 * @author administrator
 *
 */
public class concretedecorator1 extends decorator {
  public concretedecorator1(component component) {
    super(component);
  }
  @override
  public void dosomething() {
    super.dosomething();
    this.doanothing();//在傳過來的具體構(gòu)件角色原有功能的基礎(chǔ)上附加的功能
  }
  //附加的功能
  public void doanothing() {
    system.out.println("功能b");
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.tydic.decorator;
/**
 * 具體裝飾角色2,需要繼承裝飾角色,并且給出要附加的功能
 * @author administrator
 *
 */
public class concretedecorator2 extends decorator {
  public concretedecorator2(component component) {
    super(component);
  }
  @override
  public void dosomething() {
    super.dosomething();
    this.doanothing();//在傳過來的具體構(gòu)件角色原有功能的基礎(chǔ)上附加的功能
  }
  //附加的功能
  public void doanothing() {
    system.out.println("功能c");
  }
}

5. 編寫客戶端代碼

?
1
2
3
4
5
6
7
8
9
package com.tydic.decorator;
public class client {
  public static void main(string[] args) {
    component component = new concretecomponent();//具體構(gòu)建角色
    component component2 = new concretedecorator1(component);//對(duì)component這個(gè)構(gòu)件進(jìn)行裝飾
    component component3 = new concretedecorator2(component2);//對(duì)component2這個(gè)構(gòu)件進(jìn)行裝飾
    component3.dosomething();
  }
}

總結(jié):

裝飾模式能夠利用組合的做法,再不用繼承的情況下,在運(yùn)行時(shí)動(dòng)態(tài)的對(duì)對(duì)象進(jìn)行擴(kuò)展。這是繼承所做不到的。繼承是靜態(tài)的,對(duì)類的擴(kuò)展。

裝飾模式的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):1.擴(kuò)展對(duì)象的功能,比繼承更加靈活。2. 通過使用不同的具體裝飾類以及這些裝飾類的排列組合,設(shè)計(jì)師可以創(chuàng)造出很多不同行為的組合。

缺點(diǎn):會(huì)使程序變的比較復(fù)雜。

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

原文鏈接:https://blog.csdn.net/zw19910924/article/details/45226537

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人精品国产免费网站 | 激情久久综合网 | 黄免费看 | 91av导航 | 色日韩 | 欧美久| 国产精品久久久久久久久久东京 | 国产成人精品综合 | 日本免费高清视频 | 亚洲免费视频一区二区 | 狠狠搞狠狠操 | 在线播放一区二区三区 | 国产欧美日韩综合精品一区二区 | 在线看av的网址 | 欧美精品一区二区三区在线播放 | 一级片在线观看 | 羞羞的网站 | 99精品国产高清在线观看 | 毛片高清| 欧美福利电影在线观看 | 国产视频久久久久久久 | 一区二区三区视频 | 在线观看中文字幕亚洲 | 男女啪啪做爰高潮www成人福利 | 国产精品久久久久久亚洲调教 | 精品久久久久久久久久 | 亚洲成人精品一区 | 国产精品久久久久国产a级 九九在线精品视频 | 国产精品久久久久久吹潮 | 99re免费视频精品全部 | 国产精品一区二区免费 | 国产综合久久 | 国产精品99久久久久久动医院 | 亚洲一页 | 亚洲欧美视频在线 | 国产欧美日韩二区 | 国产目拍亚洲精品99久久精品 | 国产目拍亚洲精品99久久精品 | 99er视频| 在线观看成人 | 日韩中文字幕在线 |