亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

輕松掌握java裝飾者模式

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

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

特點(diǎn):

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

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

    (3) 裝飾對象接受所有來自客戶端的請求。它把這些請求轉(zhuǎn)發(fā)給真實(shí)的對象。

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

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

組成:

        (1)抽象構(gòu)件(Component)角色:給出一個(gè)抽象接口,以規(guī)范準(zhǔn)備接收附加責(zé)任的對象。
 ?。?)具體構(gòu)件(Concrete Component)角色:定義一個(gè)將要接收附加責(zé)任的類。
 ?。?)裝飾(Decorator)角色:持有一個(gè)構(gòu)件(Component)對象的實(shí)例,并實(shí)現(xiàn)一個(gè)與抽象構(gòu)件接口一致的接口。
 ?。?)具體裝飾(Concrete Decorator)角色:負(fù)責(zé)給構(gòu)件對象添加上附加的責(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();
}

/**
 * 裝飾角色: 持有要裝飾的對象
 */
class Master implements AbstractHouse{
 
 private AbstractHouse abstractHouse;

 public Master(AbstractHouse abstractHouse) {
 this.abstractHouse = abstractHouse;
 }
 
 public void doSomething() {
 System.out.println("裝飾角色:裝飾角色持有者,在這兒就是房子的主人");
 abstractHouse.doSomething();
 }
 
}

/**
 * 具體的構(gòu)件角色:具體需要被裝飾的對象 
 */
class GenericHouse implements AbstractHouse{
 public void doSomething() {
 System.out.println("具體構(gòu)建角色:房子可以住人,遮風(fēng)擋雨!");
 }
}

/**
 * 具體裝飾角色: 具體的裝飾就是在這兒做的,它繼承自裝飾角色,因?yàn)檠b飾角色持有被裝飾對象,
 * 所以它也就持有了被裝飾對象,可以做裝飾
 */
class Garage extends Master{

 public Garage(AbstractHouse abstractHouse) {
 super(abstractHouse);
 }
 
 public void doSomething() {
 super.doSomething();
 System.out.println("具體裝飾角色:在這兒做裝飾的事兒,把房子中的一間裝飾成車庫,所以房子可以存放車子了");
 }
}
/**
 * 具體裝飾角色: 具體的裝飾就是在這兒做的,它繼承自裝飾角色,因?yàn)檠b飾角色持有被裝飾對象,
 * 所以它也就持有了被裝飾對象,可以做裝飾
 */
class Kitchen extends Master{

 public Kitchen(AbstractHouse abstractHouse) {
 super(abstractHouse);
 }
 
 public void doSomething() {
 super.doSomething();
 System.out.println("具體裝飾角色:在這兒做裝飾的事兒,把房子中的一間裝飾成廚房,所以房子可以做飯了");
 }
}

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • TKmybatis的框架介紹和原理解析

    TKmybatis的框架介紹和原理解析

    tkmybatis是在mybatis框架的基礎(chǔ)上提供了很多工具,讓開發(fā)更加高效,下面來看看這個(gè)框架的基本使用,后面會(huì)對相關(guān)源碼進(jìn)行分析,感興趣的同學(xué)可以看一下,挺不錯(cuò)的一個(gè)工具
    2020-12-12
  • 關(guān)于IDEA中spring-cloud-starter-alibaba-nacos-discovery 無法引入問題

    關(guān)于IDEA中spring-cloud-starter-alibaba-nacos-discovery 無法引入問題

    這篇文章主要介紹了關(guān)于IDEA中spring-cloud-starter-alibaba-nacos-discovery 無法引入問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Java單線程程序?qū)崿F(xiàn)實(shí)現(xiàn)簡單聊天功能

    Java單線程程序?qū)崿F(xiàn)實(shí)現(xiàn)簡單聊天功能

    這篇文章主要介紹了Java單線程程序?qū)崿F(xiàn)實(shí)現(xiàn)簡單聊天功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • JAVA實(shí)戰(zhàn)項(xiàng)目實(shí)現(xiàn)客戶選購系統(tǒng)詳細(xì)流程

    JAVA實(shí)戰(zhàn)項(xiàng)目實(shí)現(xiàn)客戶選購系統(tǒng)詳細(xì)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)簡單的客戶選購系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-10-10
  • 解決idea出現(xiàn)的java.lang.OutOfMemoryError:?Java?heap?space的問題

    解決idea出現(xiàn)的java.lang.OutOfMemoryError:?Java?heap?space的問題

    我們在使用idea的時(shí)候經(jīng)常會(huì)遇到一些問題,本文介紹了如何解決idea出現(xiàn)的java.lang.OutOfMemoryError:?Java?heap?space的問題,文中有相關(guān)的圖文示例,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java實(shí)現(xiàn)獲取某年某月第一天/最后一天的方法

    Java實(shí)現(xiàn)獲取某年某月第一天/最后一天的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)獲取某年某月第一天/最后一天的方法,涉及java日期運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • Spring Boot配置過濾器的2種方式示例

    Spring Boot配置過濾器的2種方式示例

    這篇文章主要給大家介紹了關(guān)于Spring Boot配置過濾器的2種方式,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java Eclipse進(jìn)行斷點(diǎn)調(diào)試的方法

    Java Eclipse進(jìn)行斷點(diǎn)調(diào)試的方法

    本篇文章主要介紹了Java Eclipse進(jìn)行斷點(diǎn)調(diào)試的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Zuul基礎(chǔ)

    SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Zuul基礎(chǔ)

    這篇文章主要介紹了SpringCloud?Zuul微服務(wù)網(wǎng)關(guān),負(fù)載均衡,熔斷和限流,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • SpringBoot bean依賴屬性配置詳細(xì)介紹

    SpringBoot bean依賴屬性配置詳細(xì)介紹

    Spring容器是Spring的核心,一切SpringBean都存儲(chǔ)在Spring容器內(nèi)。可以說bean是spring核心中的核心。Bean配置信息定義了Bean的實(shí)現(xiàn)及依賴關(guān)系,這篇文章主要介紹了SpringBoot bean依賴屬性配置
    2022-09-09

最新評論