国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

裝飾器模式

2019-11-14 11:08:26
字體:
供稿:網(wǎng)友

把所需的功能按正確的順序串聯(lián)起來進(jìn)行控制。

Decorator:動(dòng)態(tài)的給一個(gè)對(duì)象添加一些額外的職責(zé),就增加功能來說,裝飾模式比生成子類更加靈活。

abstract class Component{    public abstract void Operation();}
class ConcreteComponent extends Component{    @override    public void Operation()    {        具體對(duì)象的操作;    }}

abstract class Decorator extends Component{    PRotected Component component;    //設(shè)置component    public void setComponent(Component component)    {        this.component = component;    }    //重寫Operation(),實(shí)際執(zhí)行的是Component的Operation()。    @override    public void Operation()    {        if (component != NULL)            component.Operation();    }}

class ConcreteDecoratorA extends Decorator{    //本類獨(dú)有的功能,以區(qū)別ConcreteDecoratorB    private string addedState;    //首先運(yùn)行原Component的Operation(),再執(zhí)行本類的功能,如addedState,相當(dāng)于對(duì)原Component進(jìn)行了裝飾。    @override    public void Operation()    {        super.Operation();        addedState =  “New State”;        具體裝飾對(duì)象A的操作;    }}
class ConcreteDecoratorB extends Decorator{    //首先運(yùn)行原Component的Operation(),再執(zhí)行本類的功能,如AddedBehavior(),相當(dāng)于對(duì)原Component進(jìn)行了裝飾。    @override    public void Operation()    {        super.Operation();        AddedBehavior();        具體裝飾對(duì)象B的操作;    }    private void AddedBehavior(){ }}
static void main(string[] args){    ConcreteComponent c = new ConcreteComponent();    ConcreteDecoraterA da = new ConcreteDecoraterA();    ConcreteDecoraterB db = new ConcreteDecoraterB();    da.setComponent(c);    db.setComponent(da);    db.Operation();}

裝飾模式是利用setComponent來對(duì)對(duì)象進(jìn)行包裝。

每個(gè)裝飾對(duì)象的實(shí)現(xiàn)就和如何使用這個(gè)對(duì)象分開了,每個(gè)裝飾對(duì)象只關(guān)心自己的功能,不需要關(guān)心如何被添加到對(duì)象鏈當(dāng)中。

 

如果只有一個(gè)ConcreteComponent類而沒有抽象的Component類,那么Decorator類可以是ConcreteComponent的一個(gè)子類。

同理,如果只有一個(gè)ConcreteDecorator類,那么就沒有必要建立一個(gè)單獨(dú)的Decorator類,而可以把Decorator和ConcreteDecorator的責(zé)任合并成一個(gè)類。

 

裝飾模式總結(jié):

裝飾模式是為已有功能動(dòng)態(tài)的添加更多功能的一種方式。

當(dāng)系統(tǒng)需要新功能的時(shí)候,是向舊的類中添加新的代碼

這些新加的代碼通常裝飾了原有類的核心職責(zé)或主要行為

在主類中加入了新的字段、新的方法和新的邏輯,從而增加了主類的復(fù)雜度。

而這些新加入的東西僅僅是為了滿足一些只在某種特定情況下才會(huì)執(zhí)行的特殊行為的需要。

裝飾器模式提供了一個(gè)非常好的解決方案,它把每個(gè)要裝飾的功能放在單獨(dú)的類中,并讓這個(gè)類包裝它所要裝飾的對(duì)象,因此,當(dāng)需要執(zhí)行特殊行為時(shí),客戶代碼就可以在運(yùn)行時(shí)根據(jù)需要有選擇的、按順序的使用裝飾功能包裝對(duì)象了。

 

裝飾模式的優(yōu)點(diǎn):

把類中的裝飾功能從類中搬移去除,這樣可以簡化原有的類。

有效的把類的核心職責(zé)和裝飾功能區(qū)分開了,而且可以去除相關(guān)類中重復(fù)的裝飾邏輯。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泌阳县| 汉源县| 富源县| 嘉善县| 平凉市| 宣威市| 浙江省| 图片| 会同县| 高阳县| 柘荣县| 民勤县| 淮安市| 洪雅县| 焉耆| 宽甸| 永吉县| 安图县| 建德市| 文化| 肃北| 治多县| 璧山县| 米泉市| 晋州市| 思茅市| 灌阳县| 苏州市| 即墨市| 武乡县| 丹棱县| 宝坻区| 江西省| 福清市| 麻栗坡县| 新乐市| 马龙县| 峡江县| 白山市| 平陆县| 丹江口市|