【发布时间】:2017-06-22 22:13:22
【问题描述】:
我正在学习设计模式,但我不确定什么是更好的做法:
我有一个“类别”类,它有几个字段:名称、2 种 url、相关对象列表。有一个方法 'toHtml()' 基本上从该类的实例生成一些 HTML。
有 4 种不同类型的 'Categories' 具有完全相同的字段,但 'toHtml()' 方法应该为每种类型提供不同的结果。
我不确定是否应该传递参数“type”和一系列 ifs/switch 语句来生成不同的 html,或者我应该将 Category 类抽象化并创建几个覆盖 toHtml() 方法的子类,然后使用 CategoryFactory 类来生成它们?在这两种情况下,我都需要传递“类型”参数。
我试图考虑“关闭以进行修改,打开以进行扩展”OOP 规则。但在这种情况下,如果我想添加“第五”类别类型,这会生成不同的 html - 对于第一个解决方案,我只需要修改 toHtml 方法(如果再添加一个),对于第二个解决方案,我需要创建额外的子类和修改 CategoryFactory 类。
什么是更好的做法?当我遇到类似的困境时,我应该遵循什么额外的规则吗?
【问题讨论】:
-
我会将类别类抽象化,为每种类型扩展它,并让您的每种类型都有自己的 toHTML()。我建议不要在您的抽象类中创建默认 toHTML() 并强制这些类实现自己的。
-
非常感谢@RAZ_Muh_Taz 的建议!
标签: java oop design-patterns coding-style apex