欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中常用的設(shè)計模式之裝飾器模式詳解

 更新時間:2022年02月27日 11:33:03   作者:Asurplus、  
這篇文章主要為大家詳細介紹了Java中常用的設(shè)計模式之裝飾器模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

優(yōu)點

1.裝飾類和被裝飾類可以獨立發(fā)展,不會相互耦合,裝飾模式是繼承的一個替代模式,裝飾模式可以動態(tài)擴展一個實現(xiàn)類的功能。

缺點

2.多層裝飾比較復(fù)雜。

使用場景

1.擴展一個類的功能。

2.動態(tài)增加功能,動態(tài)撤銷。

一、實現(xiàn)方式

假設(shè)一個場景,我們房間每天起床都要刷牙, 睡覺也要刷牙,刷牙的動作就是一個裝飾器的作用,這樣更利于我們的口腔健康。接下來我們就看看具體的裝飾器如何實現(xiàn)。

1、每天生活的接口

package com.asurplus.common.decorator;
/**
 * 每天的生活接口
 */
public interface Live {
    /**
     * 每天需要做的事情
     */
    void live();
}

2、起床的實現(xiàn)類

package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
 * 起床實現(xiàn)類
 */
@Slf4j
public class GetUpLive implements Live {
    @Override
    public void live() {
        log.info("起床了");
    }
}

3、睡覺的實現(xiàn)類

package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
 * 睡覺實現(xiàn)類
 */
@Slf4j
public class SleepLive implements Live {
    @Override
    public void live() {
        log.info("睡覺了");
    }
}

4、裝飾器類

package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
 * 裝飾器類
 */
@Slf4j
public class LiveDecorator {
    private Live live;
    public LiveDecorator(Live live) {
        this.live = live;
    }
    public void live() {
        // 生活
        live.live();
        // 刷牙
        brushTeeth();
    }
    private void brushTeeth() {
        log.info("刷牙去咯");
    }
}

二、測試

package com.asurplus.common.decorator;
/**
 * 裝飾器模式
 */
public class TestMain {
    public static void main(String[] args) {
        // 起床
        LiveDecorator getUp = new LiveDecorator(new GetUpLive());
        getUp.live();
        System.out.println();
        // 睡覺
        LiveDecorator sleep = new LiveDecorator(new SleepLive());
        sleep.live();
    }
}

輸出結(jié)果

在這里插入圖片描述

可以看出,起床和睡覺,都刷了牙,從而實現(xiàn)了我們的裝飾器模式。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!  

相關(guān)文章

  • java數(shù)據(jù)結(jié)構(gòu)排序算法之歸并排序詳解

    java數(shù)據(jù)結(jié)構(gòu)排序算法之歸并排序詳解

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)排序算法之歸并排序,結(jié)合具體實例形式詳細分析了歸并排序的原理、實現(xiàn)技巧與相關(guān)注意事項,需要的朋友可以參考下
    2017-05-05
  • SpringBoot使用前綴樹實現(xiàn)敏感詞過濾示例

    SpringBoot使用前綴樹實現(xiàn)敏感詞過濾示例

    最近項目用到了敏感詞過濾,本文主要就來介紹一下SpringBoot使用前綴樹實現(xiàn)敏感詞過濾示例,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • JVM指令的使用深入詳解

    JVM指令的使用深入詳解

    這篇文章主要給大家介紹了關(guān)于JVM指令使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • JUnit5相關(guān)內(nèi)容簡介

    JUnit5相關(guān)內(nèi)容簡介

    這篇文章主要介紹了JUnit5相關(guān)內(nèi)容簡介,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 詳解SpringBoot上傳圖片到阿里云的OSS對象存儲中

    詳解SpringBoot上傳圖片到阿里云的OSS對象存儲中

    這篇文章主要介紹了SpringBoot上傳圖片到阿里云的OSS對象存儲中,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • java及C++中傳值傳遞、引用傳遞和指針方式的理解

    java及C++中傳值傳遞、引用傳遞和指針方式的理解

    為什么 Java 只有值傳遞,但 C++ 既有值傳遞,又有引用傳遞呢?今天我們就來探討下這個問題,有需要的朋友可以參考下
    2014-09-09
  • Spring Boot2解決idea console 控制臺輸出亂碼的問題

    Spring Boot2解決idea console 控制臺輸出亂碼的問題

    這篇文章主要介紹了Spring Boot2解決idea console 控制臺輸出亂碼的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java編寫的文件管理器代碼分享

    java編寫的文件管理器代碼分享

    本文給大家分享的是一則使用java編寫的文件管理器的代碼,新人練手的作品,邏輯上還是有點小問題,大家?guī)兔纯窗伞?/div> 2015-04-04
  • Java通過 Socket 實現(xiàn) TCP服務(wù)端

    Java通過 Socket 實現(xiàn) TCP服務(wù)端

    這篇文章主要介紹了Java通過 Socket 實現(xiàn) TCP服務(wù)端的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Spring @ComponentScan注解掃描組件原理

    Spring @ComponentScan注解掃描組件原理

    這篇文章主要介紹了Spring @ComponentScan自動掃描組件使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01

最新評論