Java設計模式之三

2021-07-22 13:44:48 字數 2362 閱讀 7848

模擬乙個遙控開關燈的例子

按照正常的思路,應該是遙控器 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 問題 假設我們電腦只有乙個印表機,我們用乙個類來管理印表機資源,如果像一般的類一樣,使用者可以建立多個類的例項,那麼勢必會造成系統資源的大量浪費,為了達到節約資源的目的,我們需要尋找乙個新的方法 解決方案 我們在類內建立乙個靜態的本類指標,初始化的時候為其賦值,以後...