導航:首頁 > 編程語言 > java裝飾編程

java裝飾編程

發布時間:2023-08-19 22:59:41

1. java中裝飾模式,裝飾類和被裝飾類要實現同一個介面,為什麼怎麼理解呢

裝飾者需要和被裝飾者必須是一樣的類型,原因有兩個:其一是裝飾者必須能回取代被裝飾者,也答就是說裝飾者可以脫離被裝飾者單獨使用。 其二是裝飾者和被裝飾者必須達到類型匹配,這樣他們才能組合在一起,然後共同去描述和修飾某一事物。

裝飾者模式,在java jdk中典型的應用是io流:被裝飾者FileInputStream和裝飾者FilterInputStream都是繼承自InputStream。我把他們的類圖給你黏貼出來:

回答滿意的話給最佳噢~

2. java中幾種常見的設計模式

一共23種設計模式!

按照目的來分,設計模式可以分為創建型模式、結構型模式和行為型模式。
創建型模式用來處理對象的創建過程;結構型模式用來處理類或者對象的組合;行為型模式用來對類或對象怎樣交互和怎樣分配職責進行描述。

創建型模式用來處理對象的創建過程,主要包含以下5種設計模式:
 工廠方法模式(Factory Method Pattern)
 抽象工廠模式(Abstract Factory Pattern)
 建造者模式(Builder Pattern)
 原型模式(Prototype Pattern)
 單例模式(Singleton Pattern)

結構型模式用來處理類或者對象的組合,主要包含以下7種設計模式:
 適配器模式(Adapter Pattern)
 橋接模式(Bridge Pattern)
 組合模式(Composite Pattern)
 裝飾者模式(Decorator Pattern)
 外觀模式(Facade Pattern)
 享元模式(Flyweight Pattern)
 代理模式(Proxy Pattern)

行為型模式用來對類或對象怎樣交互和怎樣分配職責進行描述,主要包含以下11種設計模式:
 責任鏈模式(Chain of Responsibility Pattern)
 命令模式(Command Pattern)
 解釋器模式(Interpreter Pattern)
 迭代器模式(Iterator Pattern)
 中介者模式(Mediator Pattern)
 備忘錄模式(Memento Pattern)
 觀察者模式(Observer Pattern)
 狀態模式(State Pattern)
 策略模式(Strategy Pattern)
 模板方法模式(Template Method Pattern)
 訪問者模式(Visitor Pattern)

推薦你一本好書:《軟體秘笈:設計模式那點事》,裡面講解的23中設計模式例子很生動,容易理解,還有JDK中設計模式應用情況,看了收獲挺大的!網路裡面搜「設計模式」,第一條中設計模式網路中就有首推該圖書,瀏覽量在20幾萬以上的,不會錯的。好東西大家一起分享!
祝你早日學會設計模式!

3. 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 在做收尾工作

4. java設計模式--裝飾模式傳參求解

一般裝飾模式是不用set的都是構造函數傳入你要裝飾的對象,最好的例子就是jdk 關於io 操作的Stream 和Writer 這些都是很好的裝飾例子,自己去看看

閱讀全文

與java裝飾編程相關的資料

熱點內容
mx5系統基帶版本 瀏覽:184
ntlea全域通win10 瀏覽:171
qq怎麼查看別人的收藏 瀏覽:135
地震三參數matlab程序 瀏覽:57
怎樣給優盤文件加密軟體 瀏覽:7
收拾文件有哪些小妙招 瀏覽:431
pdf文件去底網 瀏覽:253
win10重裝系統需要格式化c盤嗎 瀏覽:424
路由器trx文件 瀏覽:655
淘寶店鋪數據包怎麼做 瀏覽:195
win10鍵盤黏連 瀏覽:332
json如何生成表格 瀏覽:323
怎麼修復sql資料庫表 瀏覽:40
微信微博差別 瀏覽:163
簽到積分換禮品app 瀏覽:812
mfc最近打開文件 瀏覽:672
app埋點平台都有哪些app 瀏覽:314
瑞斯康達網路管理界面 瀏覽:254
ca證書管理器linux 瀏覽:358
蘋果id安全提示問題3個字元 瀏覽:949

友情鏈接