JAVA設計模式 裝飾模式

2021-08-14 18:58:14 字數 2186 閱讀 3736

裝飾模式是一種結構型設計模式。裝飾模式的思想是:以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案

裝飾模式涉及4個角色:

結構圖:

**實現:

抽象構件、具體構件:

public

inte***ce

component

public

class

concretecomponent

implements

component

}

抽象裝飾者、具體裝飾者:

public

class

decorator

implements

component

@override

public

void

method1()

}public

class

concretedecoratora

extends

decorator

@override

public

void

method1()

}public

class

concretedecoratorb

extends

decorator

@override

public

void

method1()

}// 測試

class decoratortest

}

執行結果:

method 1

method 1

hey geek!

裝飾模式對客戶端的透明性要求程式不要宣告乙個concretecomponent型別的變數,而應當宣告乙個component型別的變數。

例如上面的測試**,我們應該宣告乙個component型別的變數,而非宣告乙個concretedecoratora型別的變數。

// 裝飾後的物件

component component = new concretedecoratora(new concretecomponent());

// 下面這樣不符合透明性要求

concretedecoratora component = new concretedecoratora(new concretecomponent());

然而,純粹的裝飾模式很難找到。裝飾模式的用意是在不改變介面的前提下,增強所考慮的類的效能。在增強效能的時候,往往需要建立新的公開的方法。這就導致了大多數的裝飾模式的實現都是「半透明」的,而不是完全透明的。這意味著客戶必須宣告concretedecorator型別的變數,才可以呼叫concretedecorator類中新增的方法。

public

class

concretedecoratorb

extends

decorator

@override

public

void

method1()

public

void

method2()

}// 測試

class decoratortest

}

半透明的裝飾模式是介於裝飾模式和介面卡模式之間的。介面卡模式的用意是改變所考慮的類的介面,也可以通過改寫乙個或幾個方法,或增加新的方法來增強或改變所考慮的類的功能。大多數的裝飾模式實際上是半透明的裝飾模式,這樣的裝飾模式也稱做半裝飾半介面卡模式

(**於網路)

缺點

適用場景

Java 設計模式 裝飾模式

看了大話設計模式此章節多遍才稍微有點理解,特此記錄。深入淺出,通俗易懂。情景 小菜要去見未來女友 嬌嬌,來個服裝打扮的設計。第一彈 客戶端 public static void main string args 問題來了,嬌嬌喜歡超人,小菜這次想穿的是超人,咋辦?直接修改小菜的類嗎?這就違背了開閉原...

java設計模式 裝飾模式

什麼是裝飾模式 裝飾模式就是動態的為乙個物件新增新的功能,它是一種代替繼承的技術,毋須通過繼承增加子類就能拓展物件功能的模式。開發中應用場景 1.io流中,設計的輸入和輸出 2.servlet api提供的乙個re quest物件的decrator模式的預設實現類httpservletrequest...

Java設計模式 裝飾模式

目錄 裝飾模式 定義 通用類圖 角色分類 抽象構件 component 具體構件 concretecomponent 裝飾角色 docorator 具體裝飾角色 concretedecoratora和b 裝飾模式與類繼承的區別 裝飾模式的特點 案例分析 輸出結果如圖所示 分析1 分析2 分析3 分析...