这是我的公司costum制作图表与连接表的一个例子.
更新我的想法
自从我开始这篇文章以来,我已经得到了很多想法,我终于提出了一个想法,我认为使用构建器模式是可靠的我想要你们想到的是什么以及你认为我可能遇到的问题.首先让我解释一下这个完整的想法:
我的公司需要某种带有连接表的标准图表,它们可以用于所有程序(这将使程序感觉它们都是相似的(它们是))因为大多数这些图表是相似的我认为我每次你必须制作一个新程序或者必须将图表放在其他地方时,很容易创建新图表的痛苦.
我公司主要使用三种不同的图表:
>条形图
> LineChart
> PieChart
创建这些图表时,有一些未知变量.
>图表系列的名称:这是将显示的名称,这与每个行/条/饼图切片不同
>期间:图表数据取自一个月或一周(每周一,周二,周三等)一个月(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()并将其添加到他的布局中.
这是我的想法.我很乐意为你发表评论.感谢您阅读,我期待着您阅读所有回复.
解决方法:
最常见的图形任务设计模式是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.如果您希望同时对活动数据有多个视图,而不仅仅是一个.