初識設計模式之裝飾者模式

2021-10-09 20:23:05 字數 1676 閱讀 3574

我們來看乙個例子,比如現在有一家餐巾紙工廠,用來生產抽紙和捲紙。如下**所示:

inte***ce

tissuefactory

class

rolltissu

implements

tissuefactory

}class

removabletissu

implements

tissuefactory

}

運營了一段時間後,工廠決定對抽紙和捲紙的生產策略進行公升級,對二者都進行3層紙和4層紙的生產。一般情況下,我們想到用繼承去實現:

inte***ce

tissuefactory

class

rolltissu

implements

tissuefactory

}class

removabletissu

implements

tissuefactory

}class

threerolltissu

extends

rolltissu

}class

fourrolltissu

extends

rolltissu

}class

threeremovabletissu

extends

removabletissu

}class

fourremovabletissu

extends

removabletissu

}

這樣一來,需求不就決解了嗎?再後來,工廠又進行公升級,要生產2層紙和5層紙厚的捲紙和抽紙,這樣一來,類的數量增加地非常快。於是,裝飾者模式登場了。

接著上面的第二段,即回到工廠剛進行生產策略公升級的部分。此時工廠的捲紙和抽紙都分別要生產三層、四層紙厚的紙,此時我們用裝飾者模式進行設計:

inte***ce

tissuefactory

class

rolltissu

implements

tissuefactory

}class

removabletissu

implements

tissuefactory

}//裝飾的是tissuefactory

abstract

class

tissuedecorator

implements

tissuefactory

}class

threetissue

extends

tissuedecorator

public

void

produce()

}class

fourtissue

extends

tissuedecorator

public

void

produce()

}public

class

run}

如此一來,當我們又進行產業公升級時,如新增2層和5層工藝時,我們只需要加上2層和5層的裝飾者就行了。

設計模式之 裝飾者模式

一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...

設計模式之裝飾者模式

此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...

設計模式之裝飾者模式

public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...