gpt4 book ai didi

java - 了解命令模式以及为什么我们需要接口(interface)?

转载 作者:行者123 更新时间:2023-12-02 04:58:50 25 4
gpt4 key购买 nike

我正在尝试减少用于在 ListView (Android) 中显示适当信息的 if else 构造

我出于学习目的创建了一个简单的命令界面,如下:

interface CommandPattern {
void execute();
}

public class CommandA implements CommandPattern {
public void execute(){
System.out.println("I am Command A");
}
}

public class CommandB implements CommandPattern{
public void execute(){
System.out.println("I am Command B");
}
}

那么我的Main如下:

public class MainClass {
static Map<String,CommandPattern> myCommand; //= new Map<String, CommandPattern>();
public static void main(String[] args){
myCommand = new HashMap<String, CommandPattern>();
myCommand.put("A",new CommandA());
myCommand.put("B",new CommandB());

// In an ideal condition I will invoke the below by supplying values I get from the Database
// myCommand.get(valuefromDB).execute();


myCommand.get("B").execute();
myCommand.get("A").execute();
}
}

我上面所做的事情可以在不使用接口(interface)的情况下通过简单地调用适当类的执行方法来扩展来实现。使用接口(interface)的原因是什么?

其次,这是否意味着对于每个 if - else 分支我必须构造一个新类?不能使用枚举来完成此操作吗?

问题背景:

我有一个数据库,我根据此数据和一些标志来获取值,我处理要在每行中显示的数据。这个 if else 结构已经超出了我所能维护的范围。所以我想介绍一种命令模式。

最佳答案

实现一个接口(interface):ClassA 有一些行为(即一个或多个方法),由 InterfaceB 定义,它支持。

扩展一个类表示 ClassA 是被扩展的 ClassB 的“特例”;即,ClassA 具有 ClassB 的所有特征(数据和方法)以及添加和/或更改。

您可以使用其中之一来实现命令模式;哪一种合适取决于具体情况。要避免的是在“特殊情况”不适用的情况下使用继承;换句话说,不要仅仅为了在类之间拥有通用方法而使用继承。

编辑:至于“这不能使用枚举来完成吗?”,目前尚不清楚“这个”是什么意思。

关于java - 了解命令模式以及为什么我们需要接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com