模擬乙個遙控開關燈的例子
按照正常的思路,應該是遙控器 remotecontrol,直接呼叫燈的on()或者off()方法,為了呼叫者和被呼叫者,或者是傳送請求和執行請求的物件松耦合,解耦。這裡抽象出命令的物件,具體的各種命令持有執行者的執行方法,比如例子中,遙控器是傳送請求者也叫invoker,燈是執行者也叫receiver,實現統一介面command的lightoncommand和lightoffcommand具體的命令,lightoncommand持有燈的on()方法,lightoffcommand持有燈的off()方法。
先看例子再說吧
首先造個 燈,有開和關兩個方法
package com.remote3c.command;
public class light
public void off()
}
接著抽象出命令的介面
package com.remote3c.command;
public inte***ce command
兩個實現了command的具體的類,這兩個命令封裝了接受者(燈)的乙個動作(也叫方法)
package com.remote3c.command;
public class lightoffcommand implements command
public void execute()
}
package com.remote3c.command;
public class lightoncommand implements command
public void execute()
}
接著再建造乙個遙控器,這個遙控器有乙個設定命令的方法 setcommand(command c),還有乙個execute()方法
package com.remote3c.command;
/** * 遙控器
* @author zhangyoushuai
* 2016-9-8
*/public class remotecontrol
public void execute()
}
最後就是測試類
package com.remote3c.command;
public class test
}
結果
light is off
這樣我們通過遙控器的setcommand()方法,就可以動態的設定命令,執行命令的方法也就執行了(燈)執行者的方法啦
這樣invoker和receiver 就解耦了,當有新增需求,比如開關吊扇,只需寫乙個吊扇的類,然後寫兩個實現了command
的命令就可以了,這樣程式的extensibility就很好。
要點:*命令模式靜傳送請求的物件和執行請求的物件解耦
*在被解耦的兩者之間是通過命令物件進行溝通的,命令物件封裝了接收者(執行請求的物件)的乙個或者一組方法
*傳送請求者通過呼叫命令物件的execute()方法發出請求,這會使得接受者的方法被呼叫。
命令模式在mvc框架中的應用參考
介面卡模式將乙個類的介面,轉化成客戶期望的另乙個介面。介面卡讓原來介面不相容的類可以合作無間。
介面卡分為類介面卡和物件介面卡,還有介面介面卡。類介面卡通過多繼承(實現介面,繼承類),物件介面卡就是介面卡持有被適配的物件。
有時我們寫的乙個介面中有多個抽象方法,當我們寫該介面的實現類時,必須實現該介面的所有方法,這明顯有時比較浪費,因為並不是所有的方法都是我們需要的,有時只需要某一些,此處為了解決這個問題,我們引入了介面的介面卡模式,借助於乙個抽象類,該抽象類實現了該介面,實現了所有的方法,而我們不和原始的介面打交道,只和該抽象類取得聯絡,所以我們寫乙個類,繼承該抽象類,重寫我們需要的方法就行
外觀模式提供了乙個統一的介面,用來訪問子系統中的一群介面。外觀定義了乙個高層介面,讓子系統更容易使用。
比如模擬開機這個動作,cpu、memory、disk每個都要start(),這裡寫個類和方法統一這些start(),開機只需呼叫這乙個方法即可。
定義:裝飾模式是在不改變原類檔案和不使用繼承的情況下,動態的擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。
1,不改變原類檔案。
2,不使用繼承。
3,動態擴充套件功能。
通過實現同乙個介面,裝飾類或者叫做擴充套件類持有原類物件,在此基礎上動態的新增功能,這樣情況就是裝飾器模式。
設計模式 之 三
一 單例模式 飽漢模式public class singlepattern2 return sp 餓漢模式public class singlepattern1 兩種模式差別在有沒有在類被載入時就給建立好物件,餓漢 即等不及了要吃東西所以要提前建立好物件,飽漢 正好相反 二 模板方法 給出演算法的骨...
設計模式之三 工廠模式
如果要擴充套件的話,則要修改源 這樣如果以後產生的phone型別很多,那麼就要一直修改,維護成本高 如果萬一你哪個型別寫錯了怎麼辦 所以出現了工廠模式。工廠模式簡單來說就是乙個工廠對應乙個產品。比如說iphonefactory產生iphone系列的手機,xiaomifactory產生xiaomi系列...
設計模式之三 Singleton
設計模式之三 singleton 問題 假設我們電腦只有乙個印表機,我們用乙個類來管理印表機資源,如果像一般的類一樣,使用者可以建立多個類的例項,那麼勢必會造成系統資源的大量浪費,為了達到節約資源的目的,我們需要尋找乙個新的方法 解決方案 我們在類內建立乙個靜態的本類指標,初始化的時候為其賦值,以後...