裝飾器模式,聽名字就知道是在原來的上面加點東西。在原類上加點東西,是不是讓你想到了什麼,對了,就是繼承。那麼他和繼承的優劣是什麼呢?物件導向的23種設計模式點這裡。我們可以先看一下裝飾器完整示例**:
這個實現沒啥好說的,但是我們要討論的是裝飾器模式的適用場景。即他和繼承到底有什麼不同,像這種畫圓球紅球的用屬性更簡單,**如下:public
class
decorator
public
static
class
redcolor
implements
color
}public
static
class
bluecolor
implements
color
}public
static
abstract
class
colordecorator
implements
color
public string draw()
}public
static
class
ballcolordecorator
extends
colordecorator
@override
public string draw()
}public
static
void
main(string args)
}輸出:
畫個紅色球
畫個藍色球
可以看出,如果是物體固有的性質。我們應該將他們設定成屬性,但是不是固有的。那它的適應場景是什麼呢,前面說到了繼承,所以就是在原類繼承不了或繼承實現複雜時使用。我們知道像string這樣final類是繼承不了的。public
class decorator
public string draw()
}public
static
void
main(string args)
}
可以看到,我們終於可以繼承string類了。但缺點也很明顯,我要實現原類的每個方法。寫哭了有沒有。其實繼承原類也是子類會有父類的乙個引用。只不過方法呼叫啥的是jvm自動判斷的。。還有個和它很像的**模式。public
class decorator
public
mystring(char
value)
public string split(string regex, int limit)
//.............中間省略n行,每個方法都要呼叫原方法
//我們更改tostring方法
public string tostring()
}public
static
void
main(string args)
}輸出:
haha
mystring:haha
裝飾器模式
大話設計模式 裝飾器模式 為已有功能動態地新增更多功能,當系統需要新功能,向舊的類中新增新功能,裝飾了原有類的核心職責和行為,而不改變它們 就像包裝袋一樣,有 的包裝袋包裝之前裝好東西的包裝袋 ifndef clothes h define clothes h include using names...
裝飾器模式
裝飾器設計模式 對真實物件動態的新增功能 抽象元件 author zhangjianbin public inte ce icar 俱體構件物件 真實的物件 author zhangjianbin class car implements icar 裝飾器物件 author zhangjianbin...
裝飾器模式
一 概念 裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該 盡量使用物件組合,而不是物件繼承來擴...