當前位置:首頁 » 網購平台 » 裝飾者模式例子購物車
擴展閱讀
寧波奧德賽優惠價格 2021-03-15 14:26:02
丹尼斯購物卡能掛失么 2021-03-15 14:25:58
淘寶購物指紋驗證失敗 2021-03-15 14:24:44

裝飾者模式例子購物車

發布時間: 2021-03-08 16:10:33

『壹』 1. 裝飾器模式解決了軟體設計的什麼問題 有什麼優點 請舉例說明該設計模式的應用場景。

裝飾者模式(Decorator Pattern),是在不必改變原類文件和使用繼承的情況下,動態的擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。
使用裝飾者模式的時候需要注意一下幾點內容:
(1)裝飾對象和真實對象有相同的介面。這樣客戶端對象就可以以和真實對象相同的方式和裝飾對象交互。
(2)裝飾對象包含一個真實對象的引用。
(3)裝飾對象接受所有的來自客戶端的請求,它把這些請求轉發給真實的對象。
(4)裝飾對象可以在轉發這些請求以前或以後增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能。在面向對象的設計中,通常是通過繼承來實現對給定類的功能擴展。然而,裝飾者模式,不需要子類可以在應用程序運行時,動態擴展功能,更加方便、靈活。

適用裝飾者模式場合:
1.當我們需要為某個現有的對象,動態的增加一個新的功能或職責時,可以考慮使用裝飾模式。
2.當某個對象的職責經常發生變化或者經常需要動態的增加職責,避免為了適應這樣的變化,而增加繼承子類擴展的方式,因為這種方式會造成子類膨脹的速度過快,難以控制。

推薦你一本設計模式方面的優秀書籍:鄭阿奇 主編的《軟體秘笈-設計模式那點事》。裡面講解很到位,實例通俗易懂,看了收獲很大!

祝你早日學會設計模式!

『貳』 關於java中裝飾者模式的詳解,不理解啊,,誰給解釋解釋。。。

裝飾者模式可以動態地給一個對象增加其他職責。就擴展對象功能來說,裝飾者模式比生成子類更為靈活。(定義)
不給你寫代碼了,寫了估計你也不看。

簡單的給你解釋吧:你只會做一件事情A,我想讓你去做B-A這件事情,不改變你的行為,你肯定不會做的。但是小明會做另一件事情B,所以我就可以讓小明去做B,並且告訴小明做完後 如果遇見你 就讓你做事情A。讓後我們你們兩個放在一塊,讓小明做B,然後事情B-A就可以被做了。同樣我想完成事情C-A,只要找到會做C的小王就可以了。

在這里你就是被裝飾者,小明和小王就是裝飾者。之所以把你叫做裝飾者,可能是因為你做的事情是主要的事情。其實這些都是可以靈活利用的 。

建議你看書 header first 設計模式

如果想看代碼,網路太多了。

如果不明白,可以追問。

『叄』 裝飾者模式:上次去面試,面試官問我知道哪些設計模式,我有說裝飾者模式,他問我java.util包裡面有一個類

裝飾者模式就是動態的給對象添加一些職責。就功能來說裝飾著模式相對與生成子類更加靈活。
當然繼承也能實現該功能,但是面向對象的基本原則之一就是:少用繼承,多用組合。

java.util中set就是,hashset和collection的源碼很容易看出,他們是裝飾者模式的構造。

『肆』 關於如何理解裝飾者模式

對於問題不是很明確 無法正確回答~ 任何關於裝修的知識可以幫你解答
希望可以幫到你
點擊我的ID,可以了解更多關於裝修的知識

『伍』 java問題 想問下 裝飾者模式有什麼實際用途呢能舉個實際應用的例子嗎

裝飾者模式用來擴展對象的功能,給對象添加不同的功能。在io流中,比如 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("d:/text.txt")))); 這種對File類的包裝,由內層到外層擴展輸入流的功能,就是一個典型的裝飾者模式。inputstream是被裝飾對象,然後Fileinputstream、InputStream、BufferedReader都是它的裝飾器,用來擴展它的功能!

『陸』 關於java裝飾者模式的一個小問題。

其實我覺得裝飾者和代理模式很像。這里我覺得就是代理模式。worker幫aworker把事情給做了。不過aworker的功能又不只是worker的功能,它還可以有別的功能,比如又傳來一個bworker給它,它就又擴展了一種功能了。

『柒』 java的裝飾者模式中裝飾類為什麼不直接實現介面

裝飾模式使用被裝飾類的一個子類的實例,把客戶端的調用委派到被裝飾類,裝飾模式的關鍵在於這種擴展是完全透明的。

裝飾模式在Java種使用也很廣泛,比如我們在重新定義按鈕、對話框等時候,實際上已經在使用裝飾模式了。裝飾模式最淺顯的例子是相片-相框的例子。

一、原理圖

其中類的職責如下:

抽象構件角色(Project):給出一個介面,以規范准備接收附加責任的對象

具體構件角色(Employe):定義一個將要接收附加責任的類

裝飾角色(Manager):持有一個構件對象的實例,並定義一個與抽象構件介面一致的介面

具體裝飾角色(ManagerA、ManagerB):負責給構件對象「貼上」附加的責任

二、下面通過一個軟體項目例子來說明裝飾模式的使用

過程是這樣的:

項目經理接到一個項目,項目最終要完成編碼。

項目經理接到項目後,先做些前期的工作(比如需求分析、設計),然後將編碼工作委派給代碼工人,代碼工人幹完後,項目經理做項目的收尾工作。

實現代碼如下:

/**
* Created by IntelliJ IDEA.
* User: leimin
* Date: 2008-8-3 12:51:06
* 項目
*/
publicinterfaceProject {

/**
* 寫代碼
*/
voiddoCoding();
}

/**
* Created by IntelliJ IDEA.
* User: leimin
* Date: 2008-8-3 12:52:12
* 代碼工人
*/
{
/**
* 編碼
*/
publicvoiddoCoding(){
System.out.println("代碼工人 在編寫代碼,加班編啊編啊,終於編完了!");
}
}

/**
* Created by IntelliJ IDEA.
* User: leimin
* Date: 2008-8-3 12:51:26
* 項目經理
*/
{
privateProject project;//實際上存放的是代碼工人對象

publicManager(Project project) {
this.project = project;
}

/**
* 編碼
*/
publicvoiddoCoding() {
//項目經理開始新的工作
startNewWork();
}

/**
* 模板:定義項目經理自己的事情
*/
publicvoidstartNewWork() {
//項目經理在做早期工作
doEarlyWork();
//項目經理很牛,做完需求和設計後,直接將編碼委派給代碼工人干
project.doCoding();
//項目經理在做收尾工作
doEndWork();
}

/**
* 項目經理自己的事情:做早期工作
*/
publicvoiddoEarlyWork() {
}

/**
* 項目經理做收尾工作
*/
publicvoiddoEndWork() {
}
}

/**
* Created by IntelliJ IDEA.
* User: leimin
* Date: 2008-8-3 13:45:18
* 具體的項目經理A
*/
{

publicManagerA(Project project) {
super(project);
}

/**
* 項目經理自己的事情:做早期工作
*/
publicvoiddoEarlyWork() {
System.out.println("項目經理A 在做需求分析");
System.out.println("項目經理A 在做架構設計");
System.out.println("項目經理A 在做詳細設計");
}
}

/**
* Created by IntelliJ IDEA.
* User: leimin
* Date: 2008-8-3 13:45:27
* 具體的項目經理B
*/
{

publicManagerB(Project project) {
super(project);
}

/**
* 項目經理自己的事情:做早期工作
*/
publicvoiddoEarlyWork() {
System.out.println("項目經理B 在做需求分析");
System.out.println("項目經理B 在做詳細設計");
}

/**
* 項目經理做收尾工作
*/
publicvoiddoEndWork() {
System.out.println("項目經理B 在做收尾工作");
}
}

/**
* Created by IntelliJ IDEA.
* User: leimin
* Date: 2008-8-3 13:03:22
* 客戶端測試
*/
publicclassClient {
publicstaticvoidmain(String args[]) {
Project employe =newEmploye();//代碼工人
Project managerA =newManagerA(employe);//項目經理
Project managerB =newManagerB(employe);//項目經理
//以經理的名義將編碼完成,功勞都是經理的,實際編碼的是工人
managerA.doCoding();
managerB.doCoding();
}
}

運行結果:

項目經理A 在做需求分析
項目經理A 在做架構設計
項目經理A 在做詳細設計
代碼工人 在編寫代碼,加班編啊編啊,終於編完了!
項目經理B 在做需求分析
項目經理B 在做詳細設計
代碼工人 在編寫代碼,加班編啊編啊,終於編完了!
項目經理B 在做收尾工作

『捌』 Java 代理模式和裝飾者模式的區別

代理模式與裝飾者模式看起來很像,都實現基礎對象實現的介面,在其自身對象中都保存著對被代理/被裝飾者的對象引用。
先來看看裝飾者模式的定義:動態的將責任附加到被裝飾者對象上,用於擴展對象的功能。比繼承的靈活性大。典型的如Java IO的設計即是裝飾者模式的典型應用。
代理模式模式的定義:對其他對象進行代理,以控制對被代理對象的訪問。Spring的為業務邏輯層方法生成的代理類,主要進行一些事務控制等。
由定義可以看出裝飾的責任是擴展功能 ,而代理主要控制訪問。
具體例子可參看Java IO裝飾/Spring的動態代理/Hibernate的代理等。

『玖』 java的i/o類中有哪些用到了裝飾者模式

裝飾者模式用來擴展對象的功能,給對象添加不同的功能。
在io流中,比如
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("d:/text.txt"))));
這種對File類的包裝,由內層到外層擴展輸入流的功能,就是一個典型的裝飾者模式。inputstream是被裝飾對象,然後Fileinputstream、InputStream、BufferedReader都是它的裝飾器,用來擴展它的功能!

『拾』 Java裝飾者模式,被增強類的方法為什麼可以調用

你main方法是靜態方法, 靜態方法是不能調用非靜態方法。 因為靜態方法是提前載入的。這個時候可能非靜態方法根本就還沒載入。所以,是部允許在靜態方法裡面調用非靜態方法的。 可以在靜態方法中,獲得非靜態方法所在的類的對象實例。 在靜態方法中,用這個實例去調用非靜態方法。 比如: A a = new A(); a.aaaaa();