Java 哪种设计模式可用于轻松添加新算法?

Java 哪种设计模式可用于轻松添加新算法?,java,design-patterns,Java,Design Patterns,我正在尝试解决此问题必须使用的设计模式: 我有计算机和算法课 1) 可能有很多计算机实例 2) 每台计算机只能有一个算法实例 3) 算法是一种抽象,它应该有一个空的“计算” 4) 具体算法在类ConcreatealG1、ConcreatealG2等中,因此可能有许多不同的具体算法类 我的目标是创建一个计算机实例,在其中创建新的ConcreteAlg235实例,而不知道添加了一些类ConcreteAlg235。所以我的目标是轻松创建新的算法类,并在类计算机实例中创建其实例,而无需编辑类计算机的代码

我正在尝试解决此问题必须使用的设计模式:

我有计算机和算法课

1) 可能有很多计算机实例

2) 每台计算机只能有一个算法实例

3) 算法是一种抽象,它应该有一个空的“计算”

4) 具体算法在类ConcreatealG1、ConcreatealG2等中,因此可能有许多不同的具体算法类

我的目标是创建一个计算机实例,在其中创建新的ConcreteAlg235实例,而不知道添加了一些类ConcreteAlg235。所以我的目标是轻松创建新的算法类,并在类计算机实例中创建其实例,而无需编辑类计算机的代码

想想看,就像我想做一些专有软件,给用户一个添加新算法的机会,让自己的源代码易于维护一样



谢谢你的任何想法

算法怎么样?通过这种方式,您可以确保当您实例化计算机时,您将期望使用execute方法实现命令接口(可以重命名为更合适的方法)

算法如何?通过这种方式,您可以确保当您实例化计算机时,您将期望使用execute方法实现命令接口(可以重命名为更合适的方法)

策略和命令模式相似,但不同。策略模式允许您交换特定算法的实现。这里需要的是命令模式,具体的类实现了一个公共接口。您可以向Computer类添加公共方法,并将其添加到内部保存的要处理的命令列表中……但是,您决定修改每台计算机的算法列表取决于您自己,但这是一种方法,非常简单

战略和指挥模式相似,但不同。策略模式允许您交换特定算法的实现。这里需要的是命令模式,具体的类实现了一个公共接口。您可以向Computer类添加公共方法,并将其添加到内部保存的要处理的命令列表中……但是,您决定修改每台计算机的算法列表取决于您自己,但这是一种方法,非常简单

我想知道为什么这个问题被否决了?@aviad我也想知道原因。我会投票支持你,直到否决者解释我想做的事,但是,在不知道原因的情况下,我想知道为什么这个问题会被一致否决?@aviad我也想知道原因。我会投票支持你,直到被否决的选民解释我想做什么,但是,在不知道下载原因的情况下,下载并不容易。名称更合适,但在这种情况下,想法基本相同……不,您正在寻找命令模式……交换部分(无需重新编译等)仅根据您使用的技术很容易实现。命令模式允许一系列类处理事件,并且该系列可以是可变系列。对于策略,您必须交换实现……我知道您的意思与我的意思相同,而且有不同的方法,但适合的正确模式是命令模式。@vinnybad命令模式更适合于像undo/redo这样的操作,在这些操作中,您不知道要撤消或重做什么,只需调用命令即可。在我看来,您有一个组件,可以执行几个不同的操作,您有几个
命令要执行。另一方面,您有一个组件将遵循某些
策略
,或者另一个组件取决于某些条件。@OscarRyz策略模式的定义属性是可以在运行时选择实现…而不是是否添加或删除了某些内容。实际上,这实际上取决于他选择使用什么实现。实现细节将显示实际选择了哪个模式,但在本例中可以选择其中一个。名称更合适,但在本例中的想法基本相同…不,您正在寻找命令模式…交换部分(无需重新编译等)这仅取决于您使用的技术。命令模式允许一系列类处理事件,并且该系列可以是可变系列。对于策略,您必须交换实现……我知道您的意思与我的意思相同,而且有不同的方法,但适合的正确模式是命令模式。@vinnybad命令模式更适合于像undo/redo这样的操作,在这些操作中,您不知道要撤消或重做什么,只需调用命令即可。在我看来,您有一个组件,可以执行几个不同的操作,您有几个
命令要执行。另一方面,您有一个组件将遵循某些
策略
,或者另一个组件取决于某些条件。@OscarRyz策略模式的定义属性是可以在运行时选择实现…而不是是否添加或删除了某些内容。实际上,这实际上取决于他选择使用什么实现。实现细节将显示实际选择的模式,但在这种情况下,可以选择其中一种。