輕鬆掌握java裝飾者模式
定義:在不必改變原類別檔案和使用繼承的情況下,動態地擴充一個物件的功能。它是透過創造一個包裝對象,也就是裝飾來包裹真實的對象。
特色:
(1) 裝飾物件和真實物件有相同的介面。這樣客戶端物件就能以和真實物件相同的方式和裝飾物件互動。
(2) 裝飾物件包含一個真實物件的引用(reference)
(3) 裝飾物件接受所有來自客戶端的請求。它把這些請求轉發給真實的物件。
(4) 裝飾對象可以在轉送這些請求以前或以後增加一些附加功能。這樣就確保了在運行時,不用修改給定物件的結構就可以在外部增加附加的功能。在物件導向的設計中,通常是透過繼承來實現對給定類別的功能擴展。
企業級開發與常用框架中的應用:IO流底層架構
組成:
(1)抽象構件(Component)角色:給予一個抽象介面,以規範準備接收附加責任的物件。
(2)具體構件(Concrete Component)角色:定義一個將要接收附加責任的類別。
(3)裝飾(Decorator)角色:持有一個構件(Component)物件的實例,並實作一個與抽象構件介面一致的介面。
(4)具體裝飾(Concrete Decorator)角色:負責為構件物件添加上附加的責任。
具體實例:
/** * 以下装饰房子举例 */ 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(); } } /** * 抽象构件角色:一个接口,用以规范具体装饰的位置 */ 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(); } } /** * 具体的构件角色:具体需要被装饰的对象 */ class GenericHouse implements AbstractHouse{ public void doSomething() { System.out.println("具体构建角色:房子可以住人,遮风挡雨!"); } } /** * 具体装饰角色: 具体的装饰就是在这儿做的,它继承自装饰角色,因为装饰角色持有被装饰对象, * 所以它也就持有了被装饰对象,可以做装饰 */ class Garage extends Master{ public Garage(AbstractHouse abstractHouse) { super(abstractHouse); } public void doSomething() { super.doSomething(); System.out.println("具体装饰角色:在这儿做装饰的事儿,把房子中的一间装饰成车库,所以房子可以存放车子了"); } } /** * 具体装饰角色: 具体的装饰就是在这儿做的,它继承自装饰角色,因为装饰角色持有被装饰对象, * 所以它也就持有了被装饰对象,可以做装饰 */ class Kitchen extends Master{ public Kitchen(AbstractHouse abstractHouse) { super(abstractHouse); } public void doSomething() { super.doSomething(); System.out.println("具体装饰角色:在这儿做装饰的事儿,把房子中的一间装饰成厨房,所以房子可以做饭了"); } }
在實際開發中,裝飾著模式的包裝作用有很大的作用,我們可以在不改變原來對象的情況下,對對像做一些其他的操作,這樣可以避免我們改造對象,但同時我們可以很好的完成一些操作。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。
更多輕鬆掌握java裝飾者模式相關文章請關注PHP中文網!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。
