成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Design Patterns-Null Object Pattern(譯)

浠ラ箍 / 538人閱讀

摘要:實現(xiàn)我們將創(chuàng)建一個抽象類,該類聲明了兩個方法以及記錄客戶端名字的屬性值。創(chuàng)建具體的類集成該抽象類。第一步創(chuàng)建抽象類第二步創(chuàng)建具體的類繼承抽象類第三步創(chuàng)建類第四步使用類通過傳遞的值來獲取或者類的對象第五步校驗輸出推薦閱讀被遺忘的設(shè)計模式

原文鏈接

譯者:smallclover

Thanks for your watching

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

在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

相關(guān)文章

  • Design Pattern - Singleton Pattern

    摘要:創(chuàng)建的對象使構(gòu)造函數(shù)私有,外界將無法實例化該類獲得唯一可用的對象第二步從單例類獲得唯一的對象。非法構(gòu)造編譯錯誤,構(gòu)造函數(shù)不可見。獲得唯一可用對象展示信息第三步校驗輸出。 原文鏈接譯者:smallclover個人翻譯,水平有限,如有錯誤歡迎指出,謝謝! 設(shè)計模式-單例模式 單例模式是Java中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式,是創(chuàng)建型模式下創(chuàng)建對象的最好方式之一。這個模式涉及到一...

    yck 評論0 收藏0
  • Design Pattern – Overview(

    摘要:設(shè)計模式是軟件開發(fā)人員在整個軟件開發(fā)的過程中面臨普遍問題的解決方案。這些作者被統(tǒng)稱為四人幫。根據(jù)這些作者的觀念,設(shè)計模式主要是基于一下幾種面向?qū)ο蟮脑O(shè)計原則。例如,單例模式表示使用單一對象。我們還將討論另外一個類別的設(shè)計模式。 原文鏈接譯者:smallclover個人翻譯,水平有限,如有錯誤歡迎指出,謝謝! 設(shè)計模式-概述 設(shè)計模式體現(xiàn)了經(jīng)驗豐富的面向?qū)ο筌浖_發(fā)人員的最佳實踐。設(shè)計模...

    WilsonLiu95 評論0 收藏0
  • Design Patterns - Iterator Pattern

    摘要:迭代器模式屬于行為型模式下的一種。實現(xiàn)我們將創(chuàng)建一個接口,該接口描述迭代所需要的方法緊接著聲明了一個接口,該接口返回一個對象。我們會創(chuàng)建具體的類實現(xiàn)接口和接口,并去使用它們。第三步使用獲得迭代器并且打印。 原文地址譯者 smallclover希望對你們有所幫助 設(shè)計模式-迭代器模式 迭代器是Java和.Net程序環(huán)境下經(jīng)常使用的一種設(shè)計模式。這種設(shè)計模式通常用來獲取能順序訪問集合對元素...

    Tony_Zby 評論0 收藏0
  • Design Patterns - Prototype Pattern

    摘要:例如,在執(zhí)行代價較高的數(shù)據(jù)庫操作后創(chuàng)建對象。引用來自腳本之家博客原型模式深拷貝與淺拷貝實現(xiàn)我們將創(chuàng)建一個抽象的類和繼承這個抽象類的子類。第一步創(chuàng)建一個抽象類實現(xiàn)接口。 原文鏈接譯者:smallclover個人翻譯,水平有限,如有錯誤歡迎指出,謝謝! 設(shè)計模式-原型模式 原型模式是指創(chuàng)建對象的副本,同時保持性能。這種類型的設(shè)計模式是創(chuàng)建型設(shè)計模式下創(chuàng)建對象最好的方式之一。 這個模式需要實...

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

    摘要:原文鏈接譯者個人翻譯,水平有限,希望有所幫助設(shè)計模式模式設(shè)計模式是模式的代表。代表可視化模型所包含的數(shù)據(jù)。它控制數(shù)據(jù)流向?qū)ο?,并且在?shù)據(jù)發(fā)生改變的時候更新視圖,它保持者和的分離。 原文鏈接 譯者:smallclover 個人翻譯,水平有限,希望有所幫助 設(shè)計模式-MVC模式 MVC設(shè)計模式 是Model-View-Controller 模式的代表(stand for)。該設(shè)計模式主...

    xuhong 評論0 收藏0

發(fā)表評論

0條評論

浠ラ箍

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<