摘要:實現(xiàn)我們將創(chuàng)建一個抽象類,該類聲明了兩個方法以及記錄客戶端名字的屬性值。創(chuàng)建具體的類集成該抽象類。第一步創(chuàng)建抽象類第二步創(chuàng)建具體的類繼承抽象類第三步創(chuàng)建類第四步使用類通過傳遞的值來獲取或者類的對象第五步校驗輸出推薦閱讀被遺忘的設(shè)計模式
設(shè)計模式-Null Object Pattern原文鏈接
譯者:smallclover
Thanks for your watching
在Null Object①設(shè)計模式中,一個Null Object替換對一個值為null的object的檢查,而不是通過if語句來判斷該值是不是為null。Null Object反映了一種do-nothing②的關(guān)系。這樣的Null Object也可以用于提供默認行為,當(dāng)數(shù)據(jù)不可用時。
在 Null Object 模式中,我們創(chuàng)建一個 抽象類聲明了各種各樣需要之執(zhí)行的操作,創(chuàng)建具體的類繼承這個抽象類,并且創(chuàng)建一個Null Object類來提供do-nothing的實現(xiàn),同時也能在我們需要的時候幫我們檢測null值。
譯注
① Null Object 直譯的話就是空對象,感覺不夠優(yōu)雅,而且不太符合它的實際意義,所以暫時使用英文單詞來代替。這里的Null Object不是指對象的值為null(Object object = null)而是指,該對象表達的是Null的含義。我們?nèi)藶榈臑閚ull賦予具體的含義,讓null代表一種特殊的數(shù)據(jù)狀態(tài)。來使程序語義更加的明確,避免空值和null等數(shù)據(jù)值使得程序語義混亂,以及null值導(dǎo)致程序的崩潰等等。這種為null賦予具體含義的思想 在Google的java類庫guava中有很好的實現(xiàn)。
② 在本文中do-nothing 指,若對象的值為null時,將不做任何動作。
實現(xiàn)我們將創(chuàng)建一個抽象類AbstractCustomer,該類聲明了兩個方法以及記錄客戶端名字的屬性值。創(chuàng)建具體的類集成該抽象類。工廠類CustomerFactory通過 客戶端傳遞給它的名字來創(chuàng)建并返回RealCustomer或者NullCustomer的對象。
NullPatternDemo,我們的demo類,將使用CustomerFactory來展示如何使用NullObjectPattern。
創(chuàng)建抽象類
AbstractCustomer.java
public abstract class AbstractCustomer { protected String name; public abstract boolean isNil(); public abstract String getName(); }第二步
創(chuàng)建具體的類繼承抽象類 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; } }第三步
創(chuàng)建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
推薦閱讀:被遺忘的設(shè)計模式
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66084.html
摘要:創(chuàng)建的對象使構(gòu)造函數(shù)私有,外界將無法實例化該類獲得唯一可用的對象第二步從單例類獲得唯一的對象。非法構(gòu)造編譯錯誤,構(gòu)造函數(shù)不可見。獲得唯一可用對象展示信息第三步校驗輸出。 原文鏈接譯者:smallclover個人翻譯,水平有限,如有錯誤歡迎指出,謝謝! 設(shè)計模式-單例模式 單例模式是Java中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式,是創(chuàng)建型模式下創(chuàng)建對象的最好方式之一。這個模式涉及到一...
摘要:設(shè)計模式是軟件開發(fā)人員在整個軟件開發(fā)的過程中面臨普遍問題的解決方案。這些作者被統(tǒng)稱為四人幫。根據(jù)這些作者的觀念,設(shè)計模式主要是基于一下幾種面向?qū)ο蟮脑O(shè)計原則。例如,單例模式表示使用單一對象。我們還將討論另外一個類別的設(shè)計模式。 原文鏈接譯者:smallclover個人翻譯,水平有限,如有錯誤歡迎指出,謝謝! 設(shè)計模式-概述 設(shè)計模式體現(xiàn)了經(jīng)驗豐富的面向?qū)ο筌浖_發(fā)人員的最佳實踐。設(shè)計模...
摘要:迭代器模式屬于行為型模式下的一種。實現(xiàn)我們將創(chuàng)建一個接口,該接口描述迭代所需要的方法緊接著聲明了一個接口,該接口返回一個對象。我們會創(chuàng)建具體的類實現(xiàn)接口和接口,并去使用它們。第三步使用獲得迭代器并且打印。 原文地址譯者 smallclover希望對你們有所幫助 設(shè)計模式-迭代器模式 迭代器是Java和.Net程序環(huán)境下經(jīng)常使用的一種設(shè)計模式。這種設(shè)計模式通常用來獲取能順序訪問集合對元素...
摘要:例如,在執(zhí)行代價較高的數(shù)據(jù)庫操作后創(chuàng)建對象。引用來自腳本之家博客原型模式深拷貝與淺拷貝實現(xiàn)我們將創(chuàng)建一個抽象的類和繼承這個抽象類的子類。第一步創(chuàng)建一個抽象類實現(xiàn)接口。 原文鏈接譯者:smallclover個人翻譯,水平有限,如有錯誤歡迎指出,謝謝! 設(shè)計模式-原型模式 原型模式是指創(chuàng)建對象的副本,同時保持性能。這種類型的設(shè)計模式是創(chuàng)建型設(shè)計模式下創(chuàng)建對象最好的方式之一。 這個模式需要實...
摘要:原文鏈接譯者個人翻譯,水平有限,希望有所幫助設(shè)計模式模式設(shè)計模式是模式的代表。代表可視化模型所包含的數(shù)據(jù)。它控制數(shù)據(jù)流向?qū)ο?,并且在?shù)據(jù)發(fā)生改變的時候更新視圖,它保持者和的分離。 原文鏈接 譯者:smallclover 個人翻譯,水平有限,希望有所幫助 設(shè)計模式-MVC模式 MVC設(shè)計模式 是Model-View-Controller 模式的代表(stand for)。該設(shè)計模式主...
閱讀 1283·2021-10-11 10:57
閱讀 2054·2021-09-02 15:15
閱讀 1614·2019-08-30 15:56
閱讀 1206·2019-08-30 15:55
閱讀 1164·2019-08-30 15:44
閱讀 989·2019-08-29 12:20
閱讀 1335·2019-08-29 11:12
閱讀 1074·2019-08-28 18:29