Java 设计模式,使组件可扩展、可插拔,而无需更改其所连接的系统

Java 设计模式,使组件可扩展、可插拔,而无需更改其所连接的系统,java,oop,design-patterns,software-design,Java,Oop,Design Patterns,Software Design,这里可以用来满足下面提到的业务需求的最佳设计模式是什么 假设我们有一个业务需求,即创建一个可轻松用于不同车辆(如汽车、船和飞机)的单一仪表板,只需进行最小更改,因此我们需要一个可轻松定制的集中式界面,以便与底层系统进行双向通信(例如,收集有关速度、电池、深度、高度、热量和功能(如转向、加速、启动、停止、制动等)的信息。仪表板应配备仪表等,这些仪表可与某个再次与底层硬件对话的东西进行对话 显而易见的解决方案是将问题分解为多个组件(见下文),这样在切换车辆时需要进行最小的更改。在以下解决方案中,仅C

这里可以用来满足下面提到的业务需求的最佳设计模式是什么

假设我们有一个业务需求,即创建一个可轻松用于不同车辆(如汽车飞机)的单一仪表板,只需进行最小更改,因此我们需要一个可轻松定制的集中式界面,以便与底层系统进行双向通信(例如,收集有关速度、电池、深度、高度、热量和功能(如转向、加速、启动、停止、制动等)的信息。仪表板应配备仪表等,这些仪表可与某个再次与底层硬件对话的东西进行对话

显而易见的解决方案是将问题分解为多个组件(见下文),这样在切换车辆时需要进行最小的更改。在以下解决方案中,仅CentralController的具体实现需要每辆车有所不同,但是,如果您在车内有大量的组件要与之通信,然后您将所有这些类型映射到我们的应用程序相关类型,例如热量表可能包含来自车内、车外和发动机的信息,因此我们讨论的是车辆中的不同部件,每辆车的部件可能不同,在这里处理数据映射的最佳做法是什么

  • 带量规的面板
  • CentralController{get/set}.CentralController执行器
  • 车辆及其部件
因此,它归结为:

在多个复杂API之上创建简化API的设计模式是什么


因为你们中的一些人认为这个问题是模糊的,所以我将把真正的问题贴在这里

我曾开发过一款应用程序,该应用程序涉及到非常复杂的硬件,可以控制大量的传感器和控件。我正在开发的应用程序只公开了一些与负责该部分的某些人类角色相关的功能

您应该看到,硬件是一个非常复杂和庞大的信息数据库,您可以对其进行操作,而我正在开发的应用程序只公开了一小部分信息,但是这些信息可能需要读取数百个表,并将所有这些信息编译到我的视图相关域对象中,该组件实际执行映射这是通用的,因此未来的应用程序可以利用它

我想从你们那里知道,什么是最好的设计模式,可以用来创建易于使用和扩展的通用组件


e、 g.Visitor+MVC是最明显的

我建议研究一种设计模式,并将其与之结合。

如果类在数据和行为上没有差异,为什么需要创建不同的类?可能创建单个类是不够的:车辆
需求中没有复杂的问题,因此您似乎不需要模式。

您的需求对于一个团队来说太广泛了。虽然访客、MVC和Facade都可能在总体设计中发挥作用,但您正在以更高和复杂的级别描述一个系统。模式对于描述一组常见行为和促进交流非常有用但是,如果使用它们的方法是“我在寻找一颗银弹”,那么这种努力将导致对承担不应有责任的模式的挫败和失望

模块使用一组模式协同工作的设计如何?这些模式使单个元素更容易集成到框架中,从而提供通用工具箱中的组件显示,然后这些组件根据正在实现的特定用例进行定制。您与仪表板的类比已被用作许多示例的起点mes是因为它是一种有用的设计方法

比如说,

  • 仪表板:用于显示仪表的框架,使用立面进行显示,前控制器为各种控制/仪表提供接口,对于仪表需要协调的情况,可能使用黑板
  • 量表:模块帮助提供组件框架,访客如果需要通用回拨行为,观察者发布/订阅如果需要异步通信,如果显示元素需要保留一段时间,则可以使用状态

这几乎肯定是我的家庭作业,我可能会补充说得很模糊。你是真的在编写这个接口还是只是写一些高级描述?哈哈,我只是想用一种简单的方式来说明这个问题,我想我不是很擅长。通常“复杂的系统,只需要几个api”facade模式提示就是这样,jeff“facade”是这个问题的正确答案:),太糟糕了,你没有将此作为答案发布,我会接受它。这应该是在我认为它可以用于面板本身,但对于实际进行数据映射的通用组件来说并不好。通常,对于UI,桥接器和构建器是组合的。(请参阅Java书籍中的模式)一个通用仪表板,只在一个类中提供数量可变的未知功能和输入?真正地这是一个你的权利凯利配方,这不能用一个单一的模式解决,我正在重构应用程序。我会告诉你事情的进展。我喜欢这个问题,尽管它已经结束了。你应该再问一次,但用这样的话来说,“我在模式X和模式Y之间选择这个行为。我能看到的每个模式的利弊列表是A/B/C等。我倾向于模式(X/Y),我是否忽略了什么?”另一个选择是在程序员的堆栈上问这个问题。