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