摘要:實現我們將創建一個抽象類,該類聲明了兩個方法以及記錄客戶端名字的屬性值。創建具體的類集成該抽象類。第一步創建抽象類第二步創建具體的類繼承抽象類第三步創建類第四步使用類通過傳遞的值來獲取或者類的對象第五步校驗輸出推薦閱讀被遺忘的設計模式
設計模式-Null Object Pattern原文鏈接
譯者:smallclover
Thanks for your watching
在Null Object①設計模式中,一個Null Object替換對一個值為null的object的檢查,而不是通過if語句來判斷該值是不是為null。Null Object反映了一種do-nothing②的關系。這樣的Null Object也可以用于提供默認行為,當數據不可用時。
在 Null Object 模式中,我們創建一個 抽象類聲明了各種各樣需要之執行的操作,創建具體的類繼承這個抽象類,并且創建一個Null Object類來提供do-nothing的實現,同時也能在我們需要的時候幫我們檢測null值。
譯注
① Null Object 直譯的話就是空對象,感覺不夠優雅,而且不太符合它的實際意義,所以暫時使用英文單詞來代替。這里的Null Object不是指對象的值為null(Object object = null)而是指,該對象表達的是Null的含義。我們人為的為null賦予具體的含義,讓null代表一種特殊的數據狀態。來使程序語義更加的明確,避免空值和null等數據值使得程序語義混亂,以及null值導致程序的崩潰等等。這種為null賦予具體含義的思想 在Google的java類庫guava中有很好的實現。
② 在本文中do-nothing 指,若對象的值為null時,將不做任何動作。
實現我們將創建一個抽象類AbstractCustomer,該類聲明了兩個方法以及記錄客戶端名字的屬性值。創建具體的類集成該抽象類。工廠類CustomerFactory通過 客戶端傳遞給它的名字來創建并返回RealCustomer或者NullCustomer的對象。
NullPatternDemo,我們的demo類,將使用CustomerFactory來展示如何使用NullObjectPattern。
創建抽象類
AbstractCustomer.java
public abstract class AbstractCustomer { protected String name; public abstract boolean isNil(); public abstract String getName(); }第二步
創建具體的類繼承抽象類 AbstractCustomer.java
RealCustomer.java
public class RealCustomer extends AbstractCustomer { public RealCustomer(String name) { this.name = name; } @Override public String getName() { return name; } @Override public boolean isNil() { return false; } }
NullCustomer.java
public class NullCustomer extends AbstractCustomer { @Override public String getName() { return "Not Available in Customer Database"; } @Override public boolean isNil() { return true; } }第三步
創建CustomerFactory類
CustomerFactory.java
public class CustomerFactory { public static final String[] names = {"Rob", "Joe", "Julie"}; public static AbstractCustomer getCustomer(String name){ for (int i = 0; i < names.length; i++) { if (names[i].equalsIgnoreCase(name)){ return new RealCustomer(name); } } return new NullCustomer(); } }第四步
使用CustomerFactory類通過customer傳遞的name值來獲取RealCustomer或者NullCustomer類的對象.
NullPatternDemo.java
public class NullPatternDemo { public static void main(String[] args) { AbstractCustomer customer1 = CustomerFactory.getCustomer("Rob"); AbstractCustomer customer2 = CustomerFactory.getCustomer("Bob"); AbstractCustomer customer3 = CustomerFactory.getCustomer("Julie"); AbstractCustomer customer4 = CustomerFactory.getCustomer("Laura"); System.out.println("Customers"); System.out.println(customer1.getName()); System.out.println(customer2.getName()); System.out.println(customer3.getName()); System.out.println(customer4.getName()); } }第五步
校驗輸出
Customers Rob Not Available in Customer Database Julie Not Available in Customer Database
推薦閱讀:被遺忘的設計模式
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66084.html
摘要:創建的對象使構造函數私有,外界將無法實例化該類獲得唯一可用的對象第二步從單例類獲得唯一的對象。非法構造編譯錯誤,構造函數不可見。獲得唯一可用對象展示信息第三步校驗輸出。 原文鏈接譯者:smallclover個人翻譯,水平有限,如有錯誤歡迎指出,謝謝! 設計模式-單例模式 單例模式是Java中最簡單的設計模式之一。這種類型的設計模式,是創建型模式下創建對象的最好方式之一。這個模式涉及到一...
摘要:設計模式是軟件開發人員在整個軟件開發的過程中面臨普遍問題的解決方案。這些作者被統稱為四人幫。根據這些作者的觀念,設計模式主要是基于一下幾種面向對象的設計原則。例如,單例模式表示使用單一對象。我們還將討論另外一個類別的設計模式。 原文鏈接譯者:smallclover個人翻譯,水平有限,如有錯誤歡迎指出,謝謝! 設計模式-概述 設計模式體現了經驗豐富的面向對象軟件開發人員的最佳實踐。設計模...
摘要:迭代器模式屬于行為型模式下的一種。實現我們將創建一個接口,該接口描述迭代所需要的方法緊接著聲明了一個接口,該接口返回一個對象。我們會創建具體的類實現接口和接口,并去使用它們。第三步使用獲得迭代器并且打印。 原文地址譯者 smallclover希望對你們有所幫助 設計模式-迭代器模式 迭代器是Java和.Net程序環境下經常使用的一種設計模式。這種設計模式通常用來獲取能順序訪問集合對元素...
摘要:例如,在執行代價較高的數據庫操作后創建對象。引用來自腳本之家博客原型模式深拷貝與淺拷貝實現我們將創建一個抽象的類和繼承這個抽象類的子類。第一步創建一個抽象類實現接口。 原文鏈接譯者:smallclover個人翻譯,水平有限,如有錯誤歡迎指出,謝謝! 設計模式-原型模式 原型模式是指創建對象的副本,同時保持性能。這種類型的設計模式是創建型設計模式下創建對象最好的方式之一。 這個模式需要實...
摘要:原文鏈接譯者個人翻譯,水平有限,希望有所幫助設計模式模式設計模式是模式的代表。代表可視化模型所包含的數據。它控制數據流向對象,并且在數據發生改變的時候更新視圖,它保持者和的分離。 原文鏈接 譯者:smallclover 個人翻譯,水平有限,希望有所幫助 設計模式-MVC模式 MVC設計模式 是Model-View-Controller 模式的代表(stand for)。該設計模式主...
閱讀 1259·2021-10-11 10:57
閱讀 2045·2021-09-02 15:15
閱讀 1607·2019-08-30 15:56
閱讀 1195·2019-08-30 15:55
閱讀 1157·2019-08-30 15:44
閱讀 977·2019-08-29 12:20
閱讀 1321·2019-08-29 11:12
閱讀 1066·2019-08-28 18:29