空對(duì)象模式

在空對(duì)象模式(Null Object Pattern)中,一個(gè)空對(duì)象取代 NULL 對(duì)象實(shí)例的檢查。Null 對(duì)象不是檢查空值,而是反應(yīng)一個(gè)不做任何動(dòng)作的關(guān)系。這樣的 Null 對(duì)象也可以在數(shù)據(jù)不可用的時(shí)候提供默認(rèn)的行為。

在空對(duì)象模式中,我們創(chuàng)建一個(gè)指定各種要執(zhí)行的操作的抽象類和擴(kuò)展該類的實(shí)體類,還創(chuàng)建一個(gè)未對(duì)該類做任何實(shí)現(xiàn)的空對(duì)象類,該空對(duì)象類將無(wú)縫地使用在需要檢查空值的地方。

實(shí)現(xiàn)

我們將創(chuàng)建一個(gè)定義操作(在這里,是客戶的名稱)的?AbstractCustomer?抽象類,和擴(kuò)展了?AbstractCustomer?類的實(shí)體類。工廠類?CustomerFactory?基于客戶傳遞的名字來(lái)返回?RealCustomer?或?NullCustomer?對(duì)象。

NullPatternDemo,我們的演示類使用?CustomerFactory?來(lái)演示空對(duì)象模式的用法。

步驟 1

創(chuàng)建一個(gè)抽象類。

AbstractCustomer.java

public abstract class AbstractCustomer {

? protected String name;

? public abstract boolean isNil();

? public abstract String getName();

}

步驟 2

創(chuàng)建擴(kuò)展了上述類的實(shí)體類。

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;

? }

}

步驟 3

創(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();

? }

}

步驟 4

使用?CustomerFactory,基于客戶傳遞的名字,來(lái)獲取?RealCustomer?或?NullCustomer?對(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());

? }

}

步驟 5

執(zhí)行程序,輸出結(jié)果:

CustomersRobNot Available in Customer DatabaseJulieNot Available in Customer Database

本文轉(zhuǎn)載:https://www.runoob.com/design-pattern/design-pattern-intro.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • DAY 05 1、 public classArrayDemo { public static void mai...
    周書達(dá)閱讀 750評(píng)論 0 0
  • 設(shè)計(jì)模式分類 總體來(lái)說(shuō)設(shè)計(jì)模式分為三大類:創(chuàng)建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原...
    lifeline丿毅閱讀 1,256評(píng)論 0 2
  • 小編費(fèi)力收集:給你想要的面試集合 1.C++或Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用。 當(dāng)JAVA程序違反了JA...
    八爺君閱讀 4,656評(píng)論 1 114
  • 愛(ài)因斯坦說(shuō)運(yùn)動(dòng)速度越快時(shí)間流逝越慢 相對(duì)靜止時(shí)間流逝反而快. 即便突破光速也無(wú)法回到從前然而未來(lái)卻像時(shí)間段落一樣的...
    TOMPHOENIX閱讀 556評(píng)論 0 2
  • 母親節(jié)專題 | “無(wú)聲告白” mom&me ///// 聽(tīng)說(shuō)神無(wú)法無(wú)處不在,所以創(chuàng)造了媽媽。即使到了媽媽的年齡,...
    蘇辭莞閱讀 579評(píng)論 0 0