0

我正在尝试使用空对象设计模式在列表的开头和结尾实现与空对象的双重链接。所以一个空列表将包含两个空对象。所以我写了这段代码这是否遵循空对象设计模式?如果不是我怎么能做到这一点。任何建议将不胜感激。

更新代码-

// 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 + "} ";

        }
    }
4

3 回答 3

4

不,您的代码没有实现Null Object Design Pattern. 它的本质不是使用null,而是创建一个代表null.

例如:

public static final NewLink NULL_NODE = new NewLink();

进而:

firstNode = NULL_NODE;
lastNode  = NULL_NODE;
于 2012-02-19T10:52:21.427 回答
2

如果我们想分配一些默认行为(或防止某些行为作为默认行为发生),我们使用Null 对象设计模式例如使用 Null 对象模式,我们可以替换以下代码:

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

因此,空对象设计模式实际上使用默认对象引用(不是空引用)

于 2012-02-19T11:10:45.203 回答
1
public static final NewLink NULL_NODE = new NewLink(); 

必须在NewLink课堂上

所以

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

您也可以将所有方法从NewLink- 抽象
并创建两个嵌套类:用于 NULL 对象和非 NULL 对象。
在困难的情况下它会很有帮助

于 2012-02-19T11:07:19.147 回答