### 裝飾模式
動態地給一個對象添加一些額外地職責,就增加功能來說,裝飾模式比生成子類更為靈活(摘抄)
裝飾模式在添加功能方面確實非常靈活,當你需要給已經生成地類添加一個新的方法的時候,用裝飾模式真的是太方便了,你只需要知道自己需要給哪一個對象添加哪一個方法就ok了
裝飾模式一般用在增加原有類的核心職責或主要行為,在主類中加入了新的字段,新的方法和新的邏輯,從而增加了主類的復雜度。
~~~
public interface SuperC
{
void Operation();
}
public class Concrete implements SuperC
{
@Override
public void Operation() {
//被修飾的類的基本操作
}
}
public class Decorator implements SuperC
{
SuperC super1;
public void setSuper (Super super1)
{
this.super1 = super1;
}
@Override
public void Operation()
{
if (super1 != null)
{
super1.Operation();
}
}
}
public class DecoratorA extends Decorator
{
@Override
public void Operation()
{
super.Operation();
// 自己的操作
}
}
public class DecoratorB extends Decorator
{
@Override
public void Operation()
{
super.Operation();
// 自己的操作
}
public void SpecialB()
{
}
}
public class DecoratorC extends Decorator
{
@Override
public void Operation()
{
super.Operation();
// 自己的操作
}
public void SpecialC()
{
}
}
~~~
調用代碼:
~~~
public static void main (String args[])
{
Concrete concrete = new Concrete();
DecoratorA a = new DecoratorA();
DecoratorB b = new DecoratorB();
DecoratorC c = new DecoratorC();
a.setSuper(concrete);
//體現裝飾模式優勢的地方來了
b.setSuper(a);
c.setSuper(a);
}
~~~
有沒有看出來有什么好處呢?
給類動態添加所需方法的優勢一下就體現了,當有需要兩個兩個對象分別有ab和ac兩種方法,這樣就可以很方便,而且當你需要添加更多的方法的時候,寫一個Decorator的子類,然后添加你需要裝飾的對象就可以了,繼承于Decorator類的功能類都是起到為Concrete類添加功能的作用
這樣做最大的好處就是有效的把類的核心職責和裝飾功能區分開了。而且可以去除相關類中重復的裝飾邏輯(摘抄)
- 前言
- (1)代碼無錯就是優?——簡單工廠模式
- (2)商場促銷——策略模式
- (3)&(4)&(5) 設計模式原則
- (6)穿什么有這么重要?——裝飾模式
- (7)為別人做嫁衣——代理模式
- (8)雷鋒依然在人間——工廠方法模式
- (9)簡歷復印——原型模式
- (10)考題抄錯會做也白搭——模板方法模式
- (11)迪米特法則
- (12)牛市股票還會虧錢?—— 外觀模式
- (13)好菜每回味不同——建造者模式
- (14)老板回來,我不知道——觀察者模式
- java實現事件委托
- (15)就不能不還DB嗎?—— 抽象工廠模式
- (16)無盡加班何時休息——狀態模式
- (17)在NBA我需要翻譯——適配器模式
- (18)如果再回到從前——備忘錄模式
- (19)分公司=部門——組合設計模式
- (20)想走?可以!先買票——迭代器模式
- (21)有些類也需計劃生育——單例模式
- (22)手機軟件何時統一——橋接模式
- (23)烤羊肉串引來的思考——命令模式
- (24)加薪非要老總批?——職責鏈模式
- (25)世界需要和平——中介者模式
- (26)項目多也別傻做——享元模式
- (28)男人和女人——訪問者模式