java - java中LinkedList的策略模式

标签 java strategy-pattern

我正在尝试使用策略模式插入双向链表。我编写了这段代码,那么这是否遵循 Java 中的纯策略模式?或者我在这里缺少什么?任何建议将不胜感激。

更新代码:-

doubleLinkedList = new DoubleLinkedList(new ConcreteStrategyAdd());
doubleLinkedList.executeStrategy("john");
doubleLinkedList.executeStrategy("tom");
doubleLinkedList.executeStrategy("carls");

这就是类(class)

class DoubleLinkedList {

 private Strategy strategy;

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

 // Constructor
 public DoubleLinkedList(Strategy strategy) {
     this.strategy = strategy;
 }

 public void executeStrategy(String a) {
    strategy.execute(a, this);
 }


    // Initializing values in the Constructor for DoubleLinkedList
    public DoubleLinkedList() {

        rootNode  = null;
        firstNode = null;
        lastNode  = null;

    }

    public boolean isEmpty() {

        return rootNode == null;

    }


}

这是策略界面

interface Strategy {
    void execute(String a, DoubleLinkedList list); 
}

//使用策略接口(interface)实现算法

public class ConcreteStrategyAdd implements Strategy {

    DoubleLinkedList doubleLinkedList = new DoubleLinkedList();


    public void execute(String a, DoubleLinkedList list) {
        System.out.println("Called ConcreteStrategyAdd's execute()");

        //insert here by using the logic


 }


    }
}

我已经更新了代码,请告诉我这是否正确?但这样我不知道应该把插入方法放在哪里。

最佳答案

您确实使用了策略模式,但您的实现存在错误:该策略将项目插入其私有(private)的、与包含该策略的列表不同的列表中。

策略界面应如下所示:

interface Strategy {
    void execute(String a, DoubleLinkedList list); 
}

具体实现应该是这样的:

public class ConcreteStrategyAdd implements Strategy {

    public void execute(String a, DoubleLinkedList list) {
        System.out.println("Called ConcreteStrategyAdd's execute()");
        list.insertReverseAlphabeticalOrder(a);
    }
}

executeStrategy 方法应该是

public void executeStrategy(String a) {
    strategy.execute(a, this);
}

此外,策略模式的目标是能够自定义某个对象的行为,而无需直接修改该对象的类。我认为您的 DoubleLInkedList 类不应该有 insertReverseAlphabeticalOrder 方法。它应该只有一个 insert 方法,具体策略应该实现逆字母顺序逻辑,然后调用 insert()

我不知道这个方法是做什么的,所以我再给你一个例子。假设您希望在将“John”传递给 executeStrategy() 方法时将“nhoJ”插入到列表中。该策略可以称为“ReverseStringInsertStrategy”。它的实现是:

public void execute(String a, DoubleLinkedList list) {
    String reversed = reverseString(a);
    list.insert(reversed);
}

现在假设您希望在将“John”传递给 executeStrategy() 方法时将“JOHN”插入到列表中。该策略可以称为“UppercaseStringInsertStrategy”。它的实现是:

public void execute(String a, DoubleLinkedList list) {
    String uppercased = uppercaseString(a);
    list.insert(uppercased);
}

关于java - java中LinkedList的策略模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9348047/

相关文章:

java - 需要创建一个类似于 HashSet 的数据结构,但应该具有包含元素的频率

design-patterns - 策略接口(interface)中的策略模式和方法数量

Java:如何在吞下异常后调用先前的方法

java - 如何使用工厂为特定主题配置 Spring Kafka Listener?

java - 在这种情况下我应该使用什么类型的消息传递? GUI 向线程发送命令; java

design-patterns - 可以在构建器模式中使用策略模式吗

design-patterns - 领域模型中的策略模式

c# - 如何实现策略模式的创建/工厂关注点?

java - 在 bean 中传递值时出错

java - Java 中的定时器任务