設計模式 9 裝飾者模式

2021-10-01 03:22:45 字數 1600 閱讀 3656

動態地將責任附加到物件上,若要擴充套件功能,裝飾者比繼承更有彈性

裝飾者將被裝飾聚合到自己內部,雙方都繼承共同的抽象方法,往往是被裝飾者只需要完成自己的本質工作,裝飾者在整合的被裝飾者功能基礎之上新增自己的邏輯。下面以飲品店咖啡和咖啡配料組合例子作為案例說明

public

abstract

class

drink

public

class

coffee

extends

drink

// 被裝飾者只需要完成自己本身的**

@override

public string getdes()

}public

class

decorator

extends

drink

在被裝飾者基礎之上進行裝飾自己行為super.getdes() + ":" + super.getprice()

@override

public string getdes()

@override

public

float

cost()

}// 被裝飾者

// 以拿鐵咖啡為例 作為被裝飾者定義自己行為即可

public

class

latte

extends

coffee

}// ------------作為裝飾者的具體實現-----------------

public

class

milk

extends

decorator

}public

class

chocolate

extends

decorator

}// ----------------客戶端----------------

public

static

void

main

(string[

] args)

public

class

lowercaseinputstream

extends

filterinputstream

@override

public

intread()

throws ioexception

}//----客戶端呼叫---

public

class

inputstreammain

in.close()

;}catch

(exception e)}}

// 輸入:i know the decorator pattern therefore i rule!

// 輸出:i know the decorator pattern therefore i rule!

《head first設計模式》

設計模式 9 裝飾者模式

說明 給乙個類增加額外的功能,適合使用,stream就是使用裝飾者模式,有了memorystream,filestream,networkstream等。實現 public abstract class car public class baoma car 我要加功能,用裝飾者 public abs...

設計模式 9 裝飾模式

裝飾模式可以動態向乙個現有的物件新增新的功能,同時又不改變其結構。就增加功能來說,使用繼承的方式生成子類也可以達到目的,但隨著擴充套件功能的不斷增加,子類的數量會快速膨脹,而裝飾模式提供了一種更加靈活的方案。gof對裝飾模式的描述為 attach additional responsibilitie...

設計模式 裝飾者模式

public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...