裝飾器模式

2021-08-07 14:01:41 字數 1567 閱讀 9641

裝飾器模式,聽名字就知道是在原來的上面加點東西。在原類上加點東西,是不是讓你想到了什麼,對了,就是繼承。那麼他和繼承的優劣是什麼呢?物件導向的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)

}輸出:

畫個紅色球

畫個藍色球

這個實現沒啥好說的,但是我們要討論的是裝飾器模式的適用場景。即他和繼承到底有什麼不同,像這種畫圓球紅球的用屬性更簡單,**如下:

public

class decorator

public string draw()

}public

static

void

main(string args)

}

可以看出,如果是物體固有的性質。我們應該將他們設定成屬性,但是不是固有的。那它的適應場景是什麼呢,前面說到了繼承,所以就是在原類繼承不了或繼承實現複雜時使用。我們知道像string這樣final類是繼承不了的。

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

可以看到,我們終於可以繼承string類了。但缺點也很明顯,我要實現原類的每個方法。寫哭了有沒有。其實繼承原類也是子類會有父類的乙個引用。只不過方法呼叫啥的是jvm自動判斷的。。還有個和它很像的**模式。

裝飾器模式

大話設計模式 裝飾器模式 為已有功能動態地新增更多功能,當系統需要新功能,向舊的類中新增新功能,裝飾了原有類的核心職責和行為,而不改變它們 就像包裝袋一樣,有 的包裝袋包裝之前裝好東西的包裝袋 ifndef clothes h define clothes h include using names...

裝飾器模式

裝飾器設計模式 對真實物件動態的新增功能 抽象元件 author zhangjianbin public inte ce icar 俱體構件物件 真實的物件 author zhangjianbin class car implements icar 裝飾器物件 author zhangjianbin...

裝飾器模式

一 概念 裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該 盡量使用物件組合,而不是物件繼承來擴...