Шаблон проектирования пустых объектов в LinkedList - PullRequest
0 голосов
/ 19 февраля 2012

Я пытаюсь реализовать дважды связанные с нулевыми объектами в начале и конце списка, используя шаблон проектирования нулевых объектов.Таким образом, пустой список будет содержать два нулевых объекта.Итак, я написал этот код. Это соответствует шаблону нулевого объекта?Если нет, то как мне этого добиться.Любые предложения будут оценены.

Обновленный код -

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

        }
    }

Ответы [ 3 ]

4 голосов
/ 19 февраля 2012

Нет, ваш код не реализует Null Object Design Pattern. Суть его не в том, чтобы использовать null, а в создании объекта, который будет представлять null.

Например:

public static final NewLink NULL_NODE = new NewLink();

А потом:

firstNode = NULL_NODE;
lastNode  = NULL_NODE;
2 голосов
/ 19 февраля 2012

Мы используем Нулевой объектный шаблон проектирования , если мы хотим назначить некоторые поведения по умолчанию (или предотвратить некоторые поведения как поведение по умолчанию). Например, используя нулевой объектный шаблон, мы можем заменить этот код:

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 Object фактически использует ссылку на объект по умолчанию (не нулевую ссылку)

1 голос
/ 19 февраля 2012
public static final NewLink NULL_NODE = new NewLink(); 

должно быть в NewLink классе

так

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

также вы можете сделать все методы из NewLink - аннотация
и создайте два вложенных класса: для объектов NULL и не для NULL.
Это может быть очень полезно в трудных ситуациях

...