你如何选择飞重设计模式中的内在状态和外在状态?

时间:2013-10-09 17:25:57

标签: design-patterns flyweight-pattern

让我们以这个问题为例,因为我厌倦了理解刻板印象的例子。

报纸公司正计划开发一种新的软件系统 管理由自己的记者和新闻来源撰写的不同新闻文章 来自不同的新闻机构。

不同的文章以不同的格式和安排显示 读者。该公司的在线新闻网站显示了最新的新闻文章 在其主要的头版。这里的珠子和新闻文章的摘要是 所示。该站点的RSS源显示了该站点的标题和摘要 XML格式的主要新闻文章。两种情况下的用户都可以单击 前往查看完整的文章。

报纸的数字版本包含格式化的完整文章 传统新闻报道。

初级软件工程师目前正在设计新的软件系统 这家报社。他设计了一个代表新闻文章的课程。 本课程的每个对象都代表一篇新闻文章,即其标题,作者, 类别,简要说明,全文等。

在所有三种情景中(在线报纸.RSS提要,数字报纸) 新闻文章类的对象将用于显示内容。

现在根据我的观点,

外在 - 标题,作者

内在 - 类别

这是对的吗?或者有没有办法有效地识别这些状态?

1 个答案:

答案 0 :(得分:0)

我可以看到flyweight模式的唯一方法是在此设置中有益的是当可共享的表示方面是内在的,并且几乎所有属于文章数据/元数据的东西都是外在的。这意味着,作为文章元数据的类别(如果我理解正确的话)不应该是内在的。但是,无论如何将表示和核心对象组合在一个类中可能是坏事,因此闯入“视图类”和“内容类”自然存在(甚至不能确定它可以被视为应用flyweight模式)。

换句话说,您操作的饲料项目,页面项目等的不同工厂。

此外,通常情况下某些文章表示比完整文章表示需要更少的元数据(例如,提要通常不使用文章的全文或文章布局特性)。这导致使用一些其他架构可能性,如果完全持久对象操作比轻量级代理对象慢,后者只有足够的元数据来呈现提要,列表等。

制定架构决策的情况有点抽象。例如,如何实现查询?他们回来了什么?所以这可能对考试问题有好处(因为上下文仅限于特定课程),但在现实生活中还有更多的考虑因素。