国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

輕松掌握java裝飾者模式

2019-11-26 13:46:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

定義:在不必改變?cè)?lèi)文件和使用繼承的情況下,動(dòng)態(tài)地?cái)U(kuò)展一個(gè)對(duì)象的功能。它是通過(guò)創(chuàng)建一個(gè)包裝對(duì)象,也就是裝飾來(lái)包裹真實(shí)的對(duì)象。

特點(diǎn):

    (1) 裝飾對(duì)象和真實(shí)對(duì)象有相同的接口。這樣客戶(hù)端對(duì)象就能以和真實(shí)對(duì)象相同的方式和裝飾對(duì)象交互。

    (2) 裝飾對(duì)象包含一個(gè)真實(shí)對(duì)象的引用(reference)

    (3) 裝飾對(duì)象接受所有來(lái)自客戶(hù)端的請(qǐng)求。它把這些請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)的對(duì)象。

    (4) 裝飾對(duì)象可以在轉(zhuǎn)發(fā)這些請(qǐng)求以前或以后增加一些附加功能。這樣就確保了在運(yùn)行時(shí),不用修改給定對(duì)象的結(jié)構(gòu)就可以在外部增加附加的功能。在面向?qū)ο蟮脑O(shè)計(jì)中,通常是通過(guò)繼承來(lái)實(shí)現(xiàn)對(duì)給定類(lèi)的功能擴(kuò)展。

企業(yè)級(jí)開(kāi)發(fā)和常用框架中的應(yīng)用:IO流底層架構(gòu)

組成:

        (1)抽象構(gòu)件(Component)角色:給出一個(gè)抽象接口,以規(guī)范準(zhǔn)備接收附加責(zé)任的對(duì)象。
  (2)具體構(gòu)件(Concrete Component)角色:定義一個(gè)將要接收附加責(zé)任的類(lèi)。
  (3)裝飾(Decorator)角色:持有一個(gè)構(gòu)件(Component)對(duì)象的實(shí)例,并實(shí)現(xiàn)一個(gè)與抽象構(gòu)件接口一致的接口。
  (4)具體裝飾(Concrete Decorator)角色:負(fù)責(zé)給構(gòu)件對(duì)象添加上附加的責(zé)任。

具體實(shí)例:

/** * 以下裝飾房子舉例 */public class Demo { public static void main(String[] args) { GenericHouse house = new GenericHouse(); Garage garage = new Garage(house); garage.doSomething(); Kitchen kitchen = new Kitchen(house); kitchen.doSomething(); }}/** * 抽象構(gòu)件角色:一個(gè)接口,用以規(guī)范具體裝飾的位置  */interface AbstractHouse{ public void doSomething();}/** * 裝飾角色: 持有要裝飾的對(duì)象 */class Master implements AbstractHouse{  private AbstractHouse abstractHouse; public Master(AbstractHouse abstractHouse) { this.abstractHouse = abstractHouse; }  public void doSomething() { System.out.println("裝飾角色:裝飾角色持有者,在這兒就是房子的主人"); abstractHouse.doSomething(); } }/** * 具體的構(gòu)件角色:具體需要被裝飾的對(duì)象  */class GenericHouse implements AbstractHouse{ public void doSomething() { System.out.println("具體構(gòu)建角色:房子可以住人,遮風(fēng)擋雨!"); }}/** * 具體裝飾角色: 具體的裝飾就是在這兒做的,它繼承自裝飾角色,因?yàn)檠b飾角色持有被裝飾對(duì)象, * 所以它也就持有了被裝飾對(duì)象,可以做裝飾 */class Garage extends Master{ public Garage(AbstractHouse abstractHouse) { super(abstractHouse); }  public void doSomething() { super.doSomething(); System.out.println("具體裝飾角色:在這兒做裝飾的事兒,把房子中的一間裝飾成車(chē)庫(kù),所以房子可以存放車(chē)子了"); }}/** * 具體裝飾角色: 具體的裝飾就是在這兒做的,它繼承自裝飾角色,因?yàn)檠b飾角色持有被裝飾對(duì)象, * 所以它也就持有了被裝飾對(duì)象,可以做裝飾 */class Kitchen extends Master{ public Kitchen(AbstractHouse abstractHouse) { super(abstractHouse); }  public void doSomething() { super.doSomething(); System.out.println("具體裝飾角色:在這兒做裝飾的事兒,把房子中的一間裝飾成廚房,所以房子可以做飯了"); }}

在實(shí)際開(kāi)發(fā)中,裝飾著模式的包裝作用有很大的作用,我們可以在不改變?cè)瓉?lái)對(duì)象的情況下,對(duì)對(duì)象做一些其他的操作,這樣可以避免我們改造對(duì)象,但同時(shí)我們又可以很好的完成一些操作。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 丰城市| 晋州市| 松阳县| 湾仔区| 平遥县| 大悟县| 汶上县| 凌源市| 历史| 玛纳斯县| 蚌埠市| 黎平县| 沾益县| 澄江县| 新蔡县| 巴塘县| 丰顺县| 东兴市| 长兴县| 新河县| 交城县| 靖边县| 唐河县| 安塞县| 苏尼特右旗| 赤水市| 怀来县| 高邑县| 建平县| 拜城县| 五寨县| 五大连池市| 芮城县| 盐源县| 图们市| 尚志市| 龙泉市| 镇康县| 洞口县| 麻江县| 姚安县|