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

輕松掌握java裝飾者模式

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

定義:在不必改變?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ì)象。
 ?。?)具體構(gòu)件(Concrete Component)角色:定義一個(gè)將要接收附加責(zé)任的類(lèi)。
 ?。?)裝飾(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í)有所幫助,也希望大家多多支持腳本之家。

相關(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枚舉類(lèi)型enum的詳解及使用

    Java枚舉類(lèi)型enum的詳解及使用

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

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

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

最新評(píng)論

盐津县| 淮北市| 上饶市| 封开县| 青海省| 绵竹市| 军事| 宁德市| 湘潭市| 泗洪县| 景德镇市| 安新县| 当雄县| 隆回县| 宁河县| 牟定县| 赣榆县| 金平| 封开县| 新绛县| 刚察县| 阿勒泰市| 个旧市| 盱眙县| 潞城市| 都昌县| 扶风县| 大化| 邯郸市| 石楼县| 南开区| 盐城市| 晋州市| 琼结县| 鄱阳县| 响水县| 波密县| 蕉岭县| 北安市| 福州市| 调兵山市|