摘要:于是乎,老李家去車行把車進(jìn)行了改裝,車速上去了,媳婦也領(lǐng)到了,皆大歡喜這其實(shí)就是一個(gè)裝飾器的使用案例,原來的車已經(jīng)沒法滿足了,所以進(jìn)行了速度增強(qiáng),其他功能并沒有改變。
裝飾器設(shè)計(jì)模式的概念
在實(shí)際生產(chǎn)中,某個(gè)類的行為(它所提供的方法)已經(jīng)沒法滿足當(dāng)前的需要了,但是又需要使用原有的部分功能,因此需要對(duì)原有對(duì)象進(jìn)行增強(qiáng)——裝飾器設(shè)計(jì)模式(Decorator Pattern)也叫包裝器模式就是為解決此問題而誕生的,它是對(duì)原有類的一個(gè)包裝,屬于結(jié)構(gòu)性設(shè)計(jì)模式。
裝飾器模式在不改變現(xiàn)有類方法簽名的前提下,對(duì)當(dāng)前的類進(jìn)行了增強(qiáng)。
Tips裝飾器設(shè)計(jì)模式的生活場(chǎng)景我們使用繼承也可以實(shí)現(xiàn),但是會(huì)導(dǎo)致類型結(jié)構(gòu)的膨脹,難以維護(hù)。
我們來看一個(gè)現(xiàn)實(shí)中的例子,老李頭家大兒子去年談了個(gè)朋友,女方要求有車才能領(lǐng)證,所以老李家買了一輛奇瑞eQ1,但是女方嫌車速太慢喜歡開快車的感覺...現(xiàn)在老李家正苦惱中...直到有一天在市里工作的大表哥回來聽說該情況后,大表哥說這個(gè)好整啊,搞到車行去改裝一下,把速度提上去就可以了啊。
于是乎,老李家去車行把車進(jìn)行了改裝,車速上去了,媳婦也領(lǐng)到了,皆大歡喜...
這其實(shí)就是一個(gè)裝飾器的使用案例,原來的eQ1車已經(jīng)沒法滿足了,所以進(jìn)行了速度增強(qiáng),其他功能并沒有改變。
裝飾器設(shè)計(jì)模式的特征被增強(qiáng)類、增強(qiáng)類實(shí)現(xiàn)同一個(gè)接口
增強(qiáng)類持有被增強(qiáng)類的引用
被增強(qiáng)的方法調(diào)用增強(qiáng)類的方法,其他方法保持原有的繼續(xù)使用被增強(qiáng)類的舊方法
裝飾器模式的設(shè)計(jì)編寫一個(gè)接口Car
被增強(qiáng)類 QeqCar 實(shí)現(xiàn) Car接口
增強(qiáng)類 Wrapper 實(shí)現(xiàn) Car接口
增強(qiáng)類 Wrapper持有被增強(qiáng)類 QeqCar 的引用
裝飾器設(shè)計(jì)模式的實(shí)現(xiàn)Car.java
public interface Car { void run(); void stop(); }
QeqCar.java
public class QeqCar implements Car { @Override public void run() { System.out.println("Qeq go..."); } @Override public void stop() { System.out.println("Qeq stop!"); } }
WrapperCar.java
public class WrapperCar implements Car { private Car car; public WrapperCar(Car car) { this.car = car; } @Override public void run() { System.out.println("wapper run..."); } @Override public void stop() { car.stop(); } }
WrapperTest .java
public class WrapperTest { @Test public void 裝飾器模式測(cè)試(){ Car car = new WrapperCar(new QeqCar()); car.run(); car.stop(); } }
測(cè)試輸出:
wapper run...
Qeq stop!
更多關(guān)于設(shè)計(jì)模式的資料請(qǐng)參考:JAVA高級(jí)架構(gòu)師技術(shù)棧
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75652.html
摘要:作者按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用和兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式原文地址是每天一個(gè)設(shè)計(jì)模式之裝飾者模式歡迎關(guān)注個(gè)人技術(shù)博客。 作者按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式...
摘要:作者按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用和兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式原文地址是每天一個(gè)設(shè)計(jì)模式之裝飾者模式歡迎關(guān)注個(gè)人技術(shù)博客。 作者按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式...
摘要:原文博客地址裝飾器模式為對(duì)象添加新功能不改變其原有的結(jié)構(gòu)和功能。手機(jī)殼就是裝飾器,沒有它手機(jī)也能正常使用,原有的功能不變,手機(jī)殼可以減輕手機(jī)滑落的損耗。 原文博客地址:https://finget.github.io/2018/11/22/decorator/ 裝飾器模式 為對(duì)象添加新功能;不改變其原有的結(jié)構(gòu)和功能。 手機(jī)殼就是裝飾器,沒有它手機(jī)也能正常使用,原有的功能不變,手機(jī)殼可以...
摘要:裝飾器模式解決的問題修飾模式,是面向?qū)ο缶幊填I(lǐng)域中,一種動(dòng)態(tài)地往一個(gè)類中添加新的行為的設(shè)計(jì)模式。可以看到,這樣的模型很具有擴(kuò)者性,我們可以輕松的添加其他裝飾器給區(qū)域?qū)ο?,且不需要更改其他類? 裝飾器模式解決的問題 修飾模式,是面向?qū)ο缶幊填I(lǐng)域中,一種動(dòng)態(tài)地往一個(gè)類中添加新的行為的設(shè)計(jì)模式。就功能而言,修飾模式相比生成子類更為靈活,這樣可以給某個(gè)對(duì)象而不是整個(gè)類添加一些功能。 將所有的功...
摘要:概念裝飾器模式允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝。這種模式創(chuàng)建了一個(gè)裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。 概念 裝飾器模式(Decorator Pattern)允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的...
閱讀 2999·2023-04-25 21:23
閱讀 3042·2021-09-22 15:24
閱讀 870·2019-08-30 12:55
閱讀 2104·2019-08-29 18:42
閱讀 2615·2019-08-29 16:27
閱讀 955·2019-08-26 17:40
閱讀 2189·2019-08-26 13:29
閱讀 2614·2019-08-26 11:45