大話設計模式之裝飾模式總結 java實現

2021-08-26 14:47:04 字數 3178 閱讀 4128

注:示例來自《大話設計模式》

現有如下要求 寫乙個可以給人搭配不同的服飾的系統 **如下

person類

package test06;

public

class person

public

void

weartshirts()

public

void

wearbigtrouser()

public

void

wearsneakers()

public

void

wearsuit()

public

void

weartie()

public

void

wearleathershoes()

public

void

show()

}

客戶端**

package test06;

public

class program

}

現在有個問題就是如果需要增加超人的裝扮 該如何做呢

需要改person類 違背了開放-封閉原則 應該把服飾都寫成子類

重構後**如下

person類

package test06;

public

class person

public

void

show()

}

服飾抽象類

package test06;

public

abstract

class finery

各種服飾子類

package test06;

public

class

tshirts

extends

finery

}

package test06;

public

class

bigtrouser

extends

finery

}

package test06;

public

class

sneakers

extends

finery

}

package test06;

public

class

suit

extends

finery

}

package test06;

public

class

tieextends

finery

}

package test06;

public

class

leathershoes

extends

finery

}

客戶端**

package test06;

public

class program

}

上面的**是乙個詞乙個詞顯示出來的 就好比 光著身子 當著大家的面 先穿 t恤 再穿褲子 再穿鞋 應該把所需的功能按正確的順序串聯起來進行控制 用裝飾模式看看如何實現 **如下

person類

package test06;

public

class person

private string name;

public

person(string name)

public

void

show()

}

服飾類

package test06;

public

class

finery

extends

person

@override

public

void

show()

}}

具體服飾類

package test06;

public

class

tshirts

extends

finery

}

package test06;

public

class

bigtrouser

extends

finery

}

package test06;

public

class

sneakers

extends

finery

}

package test06;

public

class

suit

extends

finery

}

package test06;

public

class

tieextends

finery

}

package test06;

public

class

leathershoes

extends

finery

}

客戶端**

package test06;

public

class program

}

裝飾模式是為已有功能動態地新增更多功能的一種方式 它把每個要裝飾的功能放在單獨的類中 並讓這個類包裝它所要裝飾的物件 可以在執行時 根據需要有選擇地 按順序地使用裝飾功能包裝物件

缺點:會產生過多的相似的物件 不容易排錯

大話設計模式之裝飾模式(Java總結)

在開發過程中,我們會遇到要將某乙個功能賦予額外的職責,並把這些增加了額外職責的功能按照正確的順序串聯起來進行控制,且可以靈活地調換這些順序,輸出最後執行的結果,裝飾模式就是這樣乙個非常有意思的設計模式。衣服 鞋子 領帶 披風都可以理解為對人的裝飾。而且可以選擇先穿衣服再穿鞋子,或者先穿鞋子,再穿衣服...

大話設計模式之裝飾模式

概念 動態給乙個物件新增額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。結構圖 解析 component類 定義乙個物件介面,可以給這些物件動態新增職責 方法 concretecomponent類 定義了乙個具體的物件,也可以給這個物件新增職責。decorator類 裝飾抽象類,繼承 com...

大話設計模式之裝飾模式

定義 分離類的職責,讓裝飾和主類分離,好處 利用setcomponent來物件進行包裝,這樣每個裝飾物件的實現就和如何使用這個物件分離開了,每個裝飾物件只關心自己的功能,不需要關心被如何新增到物件鏈中 有效的把類的核心職責和裝飾功能分開了,而且可以去除相關類中複雜的裝飾邏輯。例子 服飾類繼承人類,先...