最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

輕松掌握java裝飾者模式

 更新時(shí)間:2016年09月29日 16:49:40   作者:斷了聯(lián)系  
這篇文章主要幫助大家輕松掌握java裝飾者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

定義:在不必改變?cè)愇募褪褂美^承的情況下,動(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ì)象有相同的接口。這樣客戶端對(duì)象就能以和真實(shí)對(duì)象相同的方式和裝飾對(duì)象交互。

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

    (3) 裝飾對(duì)象接受所有來(lái)自客戶端的請(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ì)給定類的功能擴(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é)任的類。
 ?。?)裝飾(Decorator)角色:持有一個(gè)構(gòu)件(Component)對(duì)象的實(shí)例,并實(shí)現(xiàn)一個(gè)與抽象構(gòu)件接口一致的接口。
 ?。?)具體裝飾(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("具體裝飾角色:在這兒做裝飾的事兒,把房子中的一間裝飾成車庫(kù),所以房子可以存放車子了");
 }
}
/**
 * 具體裝飾角色: 具體的裝飾就是在這兒做的,它繼承自裝飾角色,因?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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • @RequiredArgsConstructor如何實(shí)現(xiàn)構(gòu)造器注入

    @RequiredArgsConstructor如何實(shí)現(xiàn)構(gòu)造器注入

    這篇文章主要介紹了@RequiredArgsConstructor如何實(shí)現(xiàn)構(gòu)造器注入問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • 解決Java 部署Tomcat時(shí)使用jni和jna調(diào)用DLL文件的問(wèn)題

    解決Java 部署Tomcat時(shí)使用jni和jna調(diào)用DLL文件的問(wèn)題

    這篇文章主要介紹了解決Java 部署Tomcat時(shí)使用jni和jna調(diào)用DLL文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • SpringBoot使用POI進(jìn)行Excel下載

    SpringBoot使用POI進(jìn)行Excel下載

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用POI進(jìn)行Excel下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • SpringBoot整合Liquibase的示例代碼

    SpringBoot整合Liquibase的示例代碼

    本篇文章給大家介紹SpringBoot整合Liquibase的兩種情況分析,看似整合問(wèn)題很簡(jiǎn)單,但是很容易出錯(cuò),下面小編給大家介紹下整合步驟,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • SpringBoot 對(duì)象存儲(chǔ) MinIO的詳細(xì)過(guò)程

    SpringBoot 對(duì)象存儲(chǔ) MinIO的詳細(xì)過(guò)程

    MinIO 是一個(gè)基于 Go 實(shí)現(xiàn)的高性能、兼容 S3 協(xié)議的對(duì)象存儲(chǔ),它適合存儲(chǔ)海量的非結(jié)構(gòu)化的數(shù)據(jù),這篇文章主要介紹了SpringBoot 對(duì)象存儲(chǔ) MinIO,需要的朋友可以參考下
    2023-07-07
  • 一個(gè)簡(jiǎn)陋的java圖書(shū)管理系統(tǒng)

    一個(gè)簡(jiǎn)陋的java圖書(shū)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了一個(gè)簡(jiǎn)陋的java圖書(shū)管理系統(tǒng),簡(jiǎn)單的實(shí)現(xiàn)功能測(cè)試,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Spring與Hibernate整合事務(wù)管理的理解

    Spring與Hibernate整合事務(wù)管理的理解

    這篇文章主要介紹了Spring與Hibernate整合事務(wù)管理的理解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 淺析EasyExcel如何導(dǎo)出自動(dòng)回顯中文

    淺析EasyExcel如何導(dǎo)出自動(dòng)回顯中文

    這篇文章主要為大家詳細(xì)介紹了EasyExcel如何通過(guò)全局轉(zhuǎn)換器和自定義注解實(shí)現(xiàn)導(dǎo)出自動(dòng)回顯中文,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Java枚舉類型enum的詳解及使用

    Java枚舉類型enum的詳解及使用

    這篇文章主要介紹了Java枚舉類型enum的詳解及使用的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java中成員方法與成員變量訪問(wèn)權(quán)限詳解

    Java中成員方法與成員變量訪問(wèn)權(quán)限詳解

    在Java學(xué)習(xí)過(guò)程中,在寫類經(jīng)常為用到public,private和protected,我個(gè)人的經(jīng)驗(yàn)是一般類的成員變量都是用private,方法用public,類的內(nèi)部用protected方法,如果是存在子類的,那我就會(huì)把父類中的成員變量變?yōu)閜rotected。(其余的看具體實(shí)際情 況而定)
    2015-08-08

最新評(píng)論

托克托县| 马公市| 江川县| 临高县| 武邑县| 泾阳县| 宜城市| 石首市| 启东市| 金平| 文登市| 青海省| 青岛市| 临夏市| 江西省| 类乌齐县| 德清县| 墨脱县| 清镇市| 尉犁县| 巨鹿县| 新巴尔虎左旗| 扬州市| 饶阳县| 陕西省| 秭归县| 晋州市| 团风县| 利辛县| 陵川县| 平塘县| 涟水县| 南部县| 襄樊市| 凤翔县| 常山县| 巴林左旗| 金堂县| 凤山市| 黄山市| 柳州市|