2012-02-19 14 views
0

nullオブジェクトデザインパターンを使用して、リストの先頭と末尾にヌルオブジェクトを2重にリンクして実装しようとしています。したがって、空のリストには2つのヌルオブジェクトが含まれます。だから私はこのコードを書いたこれはnullオブジェクトのデザインパターンに従っていますか?どうすればそれを達成できますか?どんな提案も感謝します。LinkedListのヌルオブジェクトデザインパターン

はありません、あなたのコードはNull Object Design Patternを実装していませんコード -

// Creating a doubly linked list. 
     doubleLinkedList = new DoubleLinkedList(); 

    class DoubleLinkedList { 

     private NewLink firstNode; 
     private NewLink lastNode; 
     private NewLink rootNode; 



     public DoubleLinkedList() { 

//So this satisfies my question that I have asked meaning null objects at beginning and last node or something else I have to do. 
      firstNode = NewLink.NULL_NODE; 
      lastNode = NewLink.NULL_NODE; 

     } 

    } 



    class NewLink { 

     public String data; 
     public NewLink nextPointer; 
     public NewLink previousPointer; 


public static final NewLink NULL_NODE = new NewLink(); 



     public NewLink(String id) { 

      data = id; 

     } 

public NewLink() { 

    } 
     // Overriding toString method to return the actual data of the node 
     public String toString() { 

      return "{" + data + "} "; 

     } 
    } 
+0

これは完全なコードですか? –

+0

私はコードを更新しました。 – AKIWEB

答えて

1
public static final NewLink NULL_NODE = new NewLink(); 

NewLinkクラス

でなければなりませんので

firstNode = NewLink.NULL_NODE; 
secondNode = NewLink.NULL_NODE; 

また、すべてのメソッドをNewLink - 抽象的
から作成し、NULLオブジェクトとNULLオブジェクトでない2つの入れ子クラスを作成することもできます。
は、それは困難な状況

+0

あなたの提案に従ってコードを更新しました。それが今なら私に知らせてください? – AKIWEB

+0

今は大丈夫です:) –

4

を更新しました。その本質はnullを使用するのではなく、nullを表すオブジェクトを作成することです。例えば

public static final NewLink NULL_NODE = new NewLink(); 

そして:

firstNode = NULL_NODE; 
lastNode = NULL_NODE; 
+0

私はコードを更新しました。それが正しければ教えてください。 – AKIWEB

+0

これは基本的な考えです。 –

+0

@ Nevzz03 - 定義を他のクラスに移動するための答えは 'user1143825'を参照してください。より論理的です。 –

2

私たちは、このコードを置き換えることができ、いくつかのデフォルトの動作を割り当てる(またはデフォルトの動作として発生するいくつかの行動を防ぐ)nullオブジェクトパターンを使用して、例えば をしたい場合我々はNull object design patternを使用するには非常に参考にすることができます。これwtih

if(myObj!=null) 
myObj.DoSomething(); 
else 
DoSomethingElse(); 

myObj.DoSomething() //assuming that myObj can be a Null object (not a null reference) that has implemented DoSomethingElse when you ask it to DoSomething() 

したがってnullオブジェクトデザインパターンは、実際には、デフォルトのオブジェクト参照(NOT NULLを使用し参考)