【黑馬程序員濟(jì)南中心】裝飾者設(shè)計(jì)模式

前言:

? ?? ? 什么是裝飾者模式:

? ?? ?? ?? ?? ?? ?? ?在不改變原類和繼承的情況下動(dòng)態(tài)的擴(kuò)展對象的功能.通過包裝一個(gè)對象(類)來實(shí)現(xiàn)一個(gè)新的具有原來對象相同接口的對象(類).

裝飾者模式的特點(diǎn):

1.? ? 在不改變原有對象的原本的結(jié)構(gòu)上進(jìn)行功能的添加.

2.? ? 裝飾對象和原對象都實(shí)現(xiàn)了相同的接口.可以使用于原有對象的方式使用裝飾對象.

3.? ? 裝飾對象中包含原有對象.即裝飾對象是真的的原始對象經(jīng)過包裝之后的對象.

使用環(huán)境:

1.? ? 在不影響其他對象的情況下.以動(dòng)態(tài).透明的方式給單個(gè)對象題添加職責(zé).

2.? ? 處理那些可以撤銷的職責(zé).

3.? ? 當(dāng)不您呢個(gè)采用生成子類的方法進(jìn)行擴(kuò)充的時(shí).一種情況是可能大量獨(dú)立的擴(kuò)展.為支持每一種擴(kuò)展將產(chǎn)生大量的之類.使得之類的數(shù)量呈爆炸性增長.另一中情況是因?yàn)槎x的類被隱藏.或是不能用于生成子類.

參與者:

1.? ? 被裝飾的對象基類.

2.? ? 被裝飾的對象.

3.? ? 裝飾者抽象類

4.? ? 具體的裝飾者

代碼:

// 基類 接口或者是抽象類??會被 被原始對象或是裝飾對象繼承或是實(shí)現(xiàn)

public interface Person {

? ? void eat();

}

// 原始對象??實(shí)現(xiàn)基類的接口

public class Man implements Person {

? ? public void eat() {

? ? ? ? System.out.println("男人在吃");

? ? }

}

// 裝飾者的抽象類 實(shí)現(xiàn)基類接口

public abstract class Decorator implements Person {

? ? protected Person person;

? ? public void setPerson(Person person) {

? ? ? ? this.person = person;

? ? }

? ? public void eat() {

? ? ? ? person.eat();

? ? }

}

//裝飾者 繼承裝飾者的抽象類.而抽象類實(shí)現(xiàn)了基類接口那么 此類中也相當(dāng)于繼承了 基類中的方法

public class ManDecoratorA extends Decorator {

? ? public void eat() {

? ? ? ? super.eat();

? ? ? ? reEat();

? ? ? ? System.out.println("ManDecoratorA類");

? ? }

? ? public void reEat() {

? ? ? ? System.out.println("再吃一頓飯");

? ? }

}


public class extends Decorator {

? ? public void eat() {

? ? ? ? super.eat();

? ? ? ? System.out.println("===============");

? ? ? ? System.out.println("ManDecoratorB類");

? ? }

}

// 測試類

public class Test {

? ? public static void main(String[] args) {

? ? ? ? Man man = new Man();

? ? ? ? ManDecoratorA md1 = new ManDecoratorA();

? ? ? ? ManDecoratorB md2 = new ManDecoratorB();


? ? ? ? md1.setPerson(man);

? ? ? ? md2.setPerson(md1);

? ? ? ? md2.eat();

? ? }

}

總結(jié): 動(dòng)態(tài)的將功能附加到對象上.想要擴(kuò)展功能.裝飾者是有別于繼承的另一種選擇.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容