設計模式之美:Null Object(空對象)[通俗易懂]本文介紹一種行為型設計模式NullObject(空對象)模式。NullObject通過對缺失對象的封裝,以提供默認無任何行為的對象替代品。
索引
意圖 結構 參與者 適用性 效果 相關模式 實現 實現方式(一):Null Object 的示例實現。意圖
通過對缺失對象的封裝,以提供默認無任何行為的對象替代品。
Encapsulate the absence of an object by providing a substitutable alternative that offers suitable default do nothing behavior.
In short, a design where “nothing will come of nothing”.
結構
參與者
AbstractObject
聲明協作對象的接口。 如果需要,可以實現默認行為。RealObject
具體的協作對象類,提供有意義的行為。NullObject
空對象類,繼承自 AbstractObject,但接口實現不做任何事情。Client
請求協作對象。適用性
當以下情況成立時可以使用 Null Object 模式:
一個對象需要一個協作對象,但并無具體的協作對象。 協作對象不需要做任何事情。效果
減少了對對象是否為 Null 的判斷。 提供默認無任何具體行為的協作對象。相關模式
因為 Null Object 通常沒有任何狀態,所以多個實例可能都是類似的,可以使用 Singleton 模式來實現。 Null Object 看起來很像 Proxy 模式,但兩者有著不同的目的。Proxy 提供對目標對象訪問的控制,而 Null Object 并不隱藏任何對象。 Null Object 可以作為 Strategy 模式中的一個特例。Strategy 提供多個具體類以區分算法,而 NullStrategy 則可不做任何事情。 Null Object 可以作為 State 模式中的一個特例。使用 NullState 以便不做任何事情。 在 Visitor 模式中也可以使用 Null Object 以提供某種默認行為。實現
實現方式(一):Null Object 的示例實現。
1 namespace NullObjectPattern.Implementation1 2 { 3 public interface ILog 4 { 5 void Write(string message); 6 } 7 8 public class ConsoleLog : ILog 9 {10 public void Write(string message)11 {12 console.writeline(message);13 }14 }15 16 public class NullLog : ILog17 {18 public void Write(string message)19 {20 // do nothing21 }22 }23 24 public class Client25 {26 public void TestCase1()27 {28 ILog log1 = new ConsoleLog();29 ILog log2 = new NullLog();30 31 log1.Write("message to log");32 log2.Write("message to log");33 }34 }35 }
【正版授權,激活自己賬號】:Jetbrains全家桶Ide使用,1年售后保障,每天僅需1毛
《設計模式之美》為Dennis Gao發布于博客園的系列文章,任何未經作者本人同意的人為或爬蟲轉載均為耍流氓。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
余額寶星期六星期天有收益嗎?余額寶雙休日也有收益的,前提是在雙休日前買入資金已經確認份額,否則是不計算利息的。即已經確認份額的資產在周末有收益,如果資金是在周四以前申購余額寶那么會在周五之前確認份額,周末是有收益的,周五以及周末轉入則需下個工作日確認份額,在轉入的那個周末沒有收益。余額寶周末可以轉出嗎?余額寶周末是可以轉出的。因為余額寶隨時都可以操作轉出,只是到賬的時間不定。像余額寶要轉出,主要就...
看跌期權可以這樣簡單理解,就是當商品的價格下跌時,我們具有依照原來的價格賣出期權的權力。比方說,當我們判斷相應產品的價格將來會有下跌的趨勢,這樣我們按照現在的價格買入相應產品的看跌期權,這樣當產品真正的下跌是,我們就可以按照我們買入的價格賣出,從而獲利。例如:我們現在預估2021年6月份,甲商品的價格出出現下跌的情況。這個時候,我們就可以按照現在甲商品5000元/噸的價格,買入甲商品5000元的看...
賣家承擔運費是指從賣家處發貨到買家處的大陸地區首次發貨運費,由賣家承擔,不需要買家支付。買家只需要支付所挑選商品的費用即可。1、淘寶買家在發現商品出現問題時一定要提前和賣家協定退貨的事宜,很多商品是用戶自己不會操作,從而導致的效果不佳,經過客服的指導之后,如果發現產品的效果有所改觀的話,就不需要再退貨了!如果效果實在不行的話,買家就需要申請退貨退款,在買家申請退款時,賣家就會告訴買家退貨的地址,并...