Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用OOP和设计模式创建标准图形生成器_Java_Oop_Design Patterns_Polymorphism - Fatal编程技术网

Java 使用OOP和设计模式创建标准图形生成器

Java 使用OOP和设计模式创建标准图形生成器,java,oop,design-patterns,polymorphism,Java,Oop,Design Patterns,Polymorphism,这是我的公司costum制作的带有连接表的图表的一个示例。 更新我的全部想法 自从我开始写这篇文章以来,我一直在思考这个问题,我终于想出了一个想法,我认为使用Builder模式是可靠的,我想告诉你们你们的想法,以及你们认为我可能遇到的问题。首先,让我解释一下完整的想法: 我的公司需要某种带有连接表的标准图形,它们可以用于所有程序(这会让程序感觉它们都是一样的(它们是一样的))由于大多数图表都是相似的,我想每次你必须制作一个新程序或将图表放在其他地方时,我都可以轻松地创建一个新图表 我的公司主

这是我的公司costum制作的带有连接表的图表的一个示例。

更新我的全部想法

自从我开始写这篇文章以来,我一直在思考这个问题,我终于想出了一个想法,我认为使用Builder模式是可靠的,我想告诉你们你们的想法,以及你们认为我可能遇到的问题。首先,让我解释一下完整的想法:

我的公司需要某种带有连接表的标准图形,它们可以用于所有程序(这会让程序感觉它们都是一样的(它们是一样的))由于大多数图表都是相似的,我想每次你必须制作一个新程序或将图表放在其他地方时,我都可以轻松地创建一个新图表

我的公司主要使用三种不同的图表:

  • 柱状图
  • 线条图
  • 皮查特
创建这些图表时,有一些未知变量

  • 图表系列的名称:这是将显示的名称,不同于每一行/条形图/饼图切片

  • 周期:图表数据取自一段时间,一天或一周(每天周一、周二、周三等),一个月(一月、二月、三月、四月等),甚至一天中的某个时间(晚上8点、9点等)

  • 图表类型:当然,区别在于用户希望看到的图表类型

最后但并非最不重要的一点是,图表创建的唯一区别在于Piechart,Piechart是Javafx中唯一一个不是从系列中创建的图表,而是从可观察列表中创建的图表,因此pieChartBuilder必须以与其他图表不同的方式使用和插入数据

上面的图片不是UML图,而是我如何规划新程序的行为和调整设计模式的演示,以下是我的想法:

  • GUI:首先,GUI总是与实际逻辑分离,我不打算要求GUI做任何事情,只是它必须在JavaFx中创建,并且必须有一个Director类的实例

  • 导演:导演类是所有动作发生的地方。首先,客户打电话给主管,告诉他想要什么类型的图表,他想要什么时间段的数据,或者他想要看到什么类型的数据。客户还设置希望查看数据的时间段(日、周、月、年等)

然后,主管获取所有这些数据,并对其统计类实例进行分类,向该类请求数据,然后主管可以将这些数据传递给图表生成器

  • 统计信息:然后统计信息类检查是否已包含数据,如果未包含数据,则检查该类是否包含数据库的对象列表:

  • 数据库:数据库是非常直接的it类,用于客户端发送的时间段内的数据(以天、周、月、年为基础)创建对象,将它们添加到列表中并返回到统计类

  • (回到)statistic类,然后计算对象数据并返回给控制器

  • (回到控制器中)控制器现在调用chartBuilder以使用时间框架(即数组或时间数组列表,这是客户端可以使用
    director.setStandardTime(time)
    在控制器中设置的选项)构建客户端指定类型的图表然后,构建者使用从主管处获得的数据创建图表和表格。然后,客户端可以调用ChartBuilder.getChart()并将其添加到布局中


这是我的主意。我希望你能对此发表评论。感谢您的阅读,我期待着阅读您的所有回复。

图形任务最常见的设计模式是Decorator(通常带有a)、Prototype/Clone和Visitor。这些肯定会派上用场

:用于当您希望以增量方式向对象添加属性时。例如:

final int radius = 100;
// With fluent interface
final Graphic boxedShadedCircle = new Circle(radius, 100, 100).shaded().boxed();
// Without fluent interface
final Graphic nonFLuentBoxedShadedCircle = new Boxed(new Shaded(new Circle(radius, 100, 100)));
:当您希望能够复制某些对象时(复制/粘贴功能)。基本上,界面是可关闭的

:当您希望向对象添加功能而不向实际对象中的代码添加功能时。比方说,如果您的应用程序可以编写脚本。有关示例,请参阅本文:

现在,请联系您的具体解决方案:

看来Decorator将是实现您的第一个解决方案提案的一个好方法。或者是某种组合(“将通用图形抽屉与数据对象结合起来”)

对于您的第二个解决方案,似乎是合适的

我说不出哪一个最好。这取决于你当地的情况。所有的实现都有优缺点,诀窍是在利大于弊的地方选择合适的实现

更新问题的更新:

ChartBuilder:这可能是设计模式。这个dp是关于以不同的方式表示或呈现抽象描述/产品,例如文档描述或数据集

导演:这是设计模式。或者,取决于意图。Facade,如果你正在“隐藏”一堆蹩脚的遗留代码,Mediator,如果你正在协调几个更现代的类的交互。这里有很多灰色地带。若Director还处理和GUI的交互(调整大小、隐藏等),那个么它肯定是中介

总的来说,您的结构是model/viewer/controller。Director充当控制器,Statistics充当模型,chartBuilder充当查看器

有几个设计模式重叠并不少见,比如让控制器充当中介

如果您使用响应的设计模式将整个过程实现为请求/响应,而不是直接调用返回值,那么您可能会更高兴。这种方式更加灵活,您可以在线程b中隐藏延迟/计算/数据库查找