摘要:于是乎,老李家去車行把車進行了改裝,車速上去了,媳婦也領到了,皆大歡喜這其實就是一個裝飾器的使用案例,原來的車已經沒法滿足了,所以進行了速度增強,其他功能并沒有改變。
裝飾器設計模式的概念
在實際生產中,某個類的行為(它所提供的方法)已經沒法滿足當前的需要了,但是又需要使用原有的部分功能,因此需要對原有對象進行增強——裝飾器設計模式(Decorator Pattern)也叫包裝器模式就是為解決此問題而誕生的,它是對原有類的一個包裝,屬于結構性設計模式。
裝飾器模式在不改變現有類方法簽名的前提下,對當前的類進行了增強。
Tips裝飾器設計模式的生活場景我們使用繼承也可以實現,但是會導致類型結構的膨脹,難以維護。
我們來看一個現實中的例子,老李頭家大兒子去年談了個朋友,女方要求有車才能領證,所以老李家買了一輛奇瑞eQ1,但是女方嫌車速太慢喜歡開快車的感覺...現在老李家正苦惱中...直到有一天在市里工作的大表哥回來聽說該情況后,大表哥說這個好整啊,搞到車行去改裝一下,把速度提上去就可以了啊。
于是乎,老李家去車行把車進行了改裝,車速上去了,媳婦也領到了,皆大歡喜...
這其實就是一個裝飾器的使用案例,原來的eQ1車已經沒法滿足了,所以進行了速度增強,其他功能并沒有改變。
裝飾器設計模式的特征被增強類、增強類實現同一個接口
增強類持有被增強類的引用
被增強的方法調用增強類的方法,其他方法保持原有的繼續使用被增強類的舊方法
裝飾器模式的設計編寫一個接口Car
被增強類 QeqCar 實現 Car接口
增強類 Wrapper 實現 Car接口
增強類 Wrapper持有被增強類 QeqCar 的引用
裝飾器設計模式的實現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 裝飾器模式測試(){ Car car = new WrapperCar(new QeqCar()); car.run(); car.stop(); } }
測試輸出:
wapper run...
Qeq stop!
更多關于設計模式的資料請參考:JAVA高級架構師技術棧
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75652.html
摘要:作者按每天一個設計模式旨在初步領會設計模式的精髓,目前采用和兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式原文地址是每天一個設計模式之裝飾者模式歡迎關注個人技術博客。 作者按:《每天一個設計模式》旨在初步領會設計模式的精髓,目前采用javascript和python兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式...
摘要:作者按每天一個設計模式旨在初步領會設計模式的精髓,目前采用和兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式原文地址是每天一個設計模式之裝飾者模式歡迎關注個人技術博客。 作者按:《每天一個設計模式》旨在初步領會設計模式的精髓,目前采用javascript和python兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式...
摘要:原文博客地址裝飾器模式為對象添加新功能不改變其原有的結構和功能。手機殼就是裝飾器,沒有它手機也能正常使用,原有的功能不變,手機殼可以減輕手機滑落的損耗。 原文博客地址:https://finget.github.io/2018/11/22/decorator/ 裝飾器模式 為對象添加新功能;不改變其原有的結構和功能。 手機殼就是裝飾器,沒有它手機也能正常使用,原有的功能不變,手機殼可以...
摘要:裝飾器模式解決的問題修飾模式,是面向對象編程領域中,一種動態地往一個類中添加新的行為的設計模式??梢钥吹剑@樣的模型很具有擴者性,我們可以輕松的添加其他裝飾器給區域對象,且不需要更改其他類, 裝飾器模式解決的問題 修飾模式,是面向對象編程領域中,一種動態地往一個類中添加新的行為的設計模式。就功能而言,修飾模式相比生成子類更為靈活,這樣可以給某個對象而不是整個類添加一些功能。 將所有的功...
摘要:概念裝飾器模式允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。 概念 裝飾器模式(Decorator Pattern)允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的...
閱讀 2989·2023-04-25 21:23
閱讀 3022·2021-09-22 15:24
閱讀 862·2019-08-30 12:55
閱讀 2095·2019-08-29 18:42
閱讀 2607·2019-08-29 16:27
閱讀 943·2019-08-26 17:40
閱讀 2173·2019-08-26 13:29
閱讀 2604·2019-08-26 11:45