設計模式之裝飾者模式 Decorator

2021-07-27 20:40:32 字數 3586 閱讀 2678

意圖:

動態地給乙個物件新增一些額外的職責.就增加功能來說,decorator模式相對於生成子類更為靈活

適用性:

1.在不影響其他物件的情況下,以動態,透明的方式給單個物件新增職責.

2.處理那些可以撤銷的職責.

3.當不能採用生成子類的方式進行擴充時.

效果:1.比靜態繼承更靈活

2.避免在層次結構高層的類有太多的特性

3.decorator與它的component不一樣

4.有許多小物件

**實現:

package com.git.books.b_design_patterns.i_decorator;

/** *

* @description: 裝飾模式 頂級定義類 對乙個人進行裝飾(穿衣)

* @author: songqinghu

* @date: 2023年3月4日 下午3:24:43

* version:1.0

*/public abstract class peoplecomponent

public abstract void show();

}

package com.git.books.b_design_patterns.i_decorator;

/** *

* @description: 人

* @author: songqinghu

* @date: 2023年3月4日 下午3:25:53

* version:1.0

*/public class people

public void setname(string name)

public int getage()

public void setage(int age)

public gender getgender()

public void setgender(gender gender)

@override

public string tostring()

}

package com.git.books.b_design_patterns.i_decorator;

/** * @description: 被裝飾的例項類

* @author: songqinghu

* @date: 2023年3月4日 下午3:31:01

* version:1.0

*/public class peopleconcrete extends peoplecomponent

@override

public void show()

}

package com.git.books.b_design_patterns.i_decorator;

/** *

* @description: 裝飾類介面定義類

* @author: songqinghu

* @date: 2023年3月4日 下午3:34:39

* version:1.0

*/public abstract class peopledecorator extends peoplecomponent

//簡單定義裝飾行為

public abstract void action();

}

package com.git.books.b_design_patterns.i_decorator;

/** *

* @description: 包裝 使之穿上衣服

* @author: songqinghu

* @date: 2023年3月4日 下午3:47:21

* version:1.0

*/public class clothesdecorator extends peopledecorator

@override

public void action()

@override

public void show()

}

package com.git.books.b_design_patterns.i_decorator;

/** * @description: 包裝 使之穿上褲子

* @author: songqinghu

* @date: 2023年3月4日 下午3:47:51

* version:1.0

*/public class pantsdecorator extends peopledecorator

@override

public void action()

@override

public void show()

}

package com.git.books.b_design_patterns.i_decorator;

/** * @description: 包裝使之收穫讚美

* @author: songqinghu

* @date: 2023年3月4日 下午3:49:10

* version:1.0

*/public class praisedecorator extends peopledecorator

@override

public void action() else

}@override

public void show()

}

package com.git.books.b_design_patterns.i_decorator;

public enum gender

package com.git.books.b_design_patterns.i_decorator;

/** *

* @description: 裝飾模式測試類

* @author: songqinghu

* @date: 2023年3月4日 下午3:53:58

* version:1.0

*/public class thedecoratortest

}

執行結果:

coco put on a beautiful dress

coco put on a beautiful pants

my name : coco, age :19, gender : woman

this woman is charming!

結構圖:

重點:理解如何進行包裝.

參考:《設計模式》

<

設計模式之 裝飾者模式

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

設計模式之裝飾者模式

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

設計模式之裝飾者模式

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