亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Design Patterns-Null Object Pattern(譯)

浠ラ箍 / 595人閱讀

摘要:實(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ì)模式

原文鏈接

譯者:smallclover

Thanks for your watching

設(shè)計(jì)模式-Null Object Pattern

在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

相關(guān)文章

  • Design Pattern - Singleton Pattern

    摘要:創(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è)模式涉及到一...

    yck 評(píng)論0 收藏0
  • Design Pattern – Overview(

    摘要:設(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ì)模...

    WilsonLiu95 評(píng)論0 收藏0
  • Design Patterns - Iterator Pattern

    摘要:迭代器模式屬于行為型模式下的一種。實(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ì)元素...

    Tony_Zby 評(píng)論0 收藏0
  • Design Patterns - Prototype Pattern

    摘要:例如,在執(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í)...

    KunMinX 評(píng)論0 收藏0
  • Design Patterns-MVC Pattern()

    摘要:原文鏈接譯者個(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ì)模式主...

    xuhong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

浠ラ箍

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<