使用OOP和设计模式创建标准图形构建器

时间:2012-11-29 20:17:26

标签: java oop design-patterns polymorphism

这是我的公司costum制作图表与连接表的一个例子。

This is an example of the lineChart with a connected table.

更新我的完整想法 enter image description here

自从我开始这篇文章以来,我已经得到了很多想法,我终于提出了一个想法,我认为使用Builder模式是可靠的我想要你们想到的是什么以及你认为我可能会遇到什么问题遇到了。首先让我解释一下这个完整的想法:

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

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

  • BARCHART
  • 应用于LineChart
  • 饼图

创建这些图表时,有一些未知变量。

  • 图表系列的名称:这是将显示的名称,这与每个行/条/饼图片不同

  • 期间:图表数据取自一个月或一周(每周一,周二,周三等)一个月(1月,2月,3月,4月等)或甚至是一天。(晚上8点到晚上9点等)。

  • 图表类型:当然,差异是用户想要查看的图表类型。

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

上面的图片不是UML图,它是我如何计划我的新程序来表现和调整设计模式的演示,这里是我想到的:

  • GUI:首先Gui总是与实际逻辑分开,我没有计划从GUI要求任何东西,除了它必须在JavaFx中创建并且它必须有一个Director类的实例。

  • 导演:导演课是所有动作发生的地方。首先,客户端使用他想要获得的图表类型,他想要数据的时间段以及他想要查看的数据类型来调用导演。客户还设置他希望查看数据的时间段(日,周,月,年等)。

然后,Director获取所有数据并将他的统计类实例分类,向类询问导向器可以在“图表”构建器上传递的数据。

  • 统计:然后统计类检查它是否已包含数据,如果不是,则为类的数据库对象列表:

  • DataBase:数据库非常简单,客户端发送的时间段内的数据类(基于日,周,月,年)创建对象添加到列表并将其返回到统计类。

  • (返回)统计类中然后计算对象数据并将其返回给控制器。

  • (回到导演中)导演现在调用chartBuilder来构建一个由客户端指定的类型的图表,其中包含时间范围(这是一个数组或时间的arraylist,这是客户端可以选择的选项使用Director.setStandardTime(time)在导演中设置,然后构建器使用从Director获得的数据创建图表和表格。然后,客户端可以调用ChartBuilder.getChart()并将其添加到他的布局中。

这是我的想法。我很乐意为你发表评论。感谢您阅读,我期待着您阅读所有回复。

2 个答案:

答案 0 :(得分:3)

图形任务最常见的设计模式是Decorator(通常带有"fluent" interface),Prototype / Clone和Visitor。这些将合适地派上用场。

Decorator:用于何时以增量方式向对象添加属性。如:

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)));

Prototype/Clone:用于何时希望能够复制某些对象(复制/粘贴功能)。它基本上就是Clonable接口。

Visitor:当您想要向对象添加功能而不添加实际对象中的代码时。如果您的应用程序以某种方式编写脚本,请说。请参阅此帖子以获取示例:Visitor pattern

现在与您的具体解决方案相关:

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

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

我不能说哪个是最好的。这取决于您当地的情况。所有的实现都有优点和缺点,诀窍是选择适当的一个,其中优点超过缺点。

更新更新的问题:

ChartBuilder:这应该是设计模式"Builder".这个dp是以不同的方式表示或呈现抽象的描述/产品,如文档描述或数据集。

导演:这是设计模式Mediator。或Facade,视意图而定。如果你正在“隐藏”一个糟糕的遗留代码球,如果你正在协调几个更现代的类的交互,那么Facade。这里有很多灰色区域。如果Director还处理与GUI的交互(调整大小,隐藏等),它肯定是Mediator。

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

让几个设计模式重叠是很常见的,就像让控制器充当中介一样。

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

您可能希望将Composite用于chartBuilder。如果您希望同时对活动数据有多个视图,而不仅仅是一个。

答案 1 :(得分:0)

查看EyeSee,并制作一个java实现