【发布时间】:2013-02-20 02:26:38
【问题描述】:
假设您需要构建一个管理支票的应用程序。每张支票都包含有关金额、日期、收款人和可能存在或不存在的附加付款日期的数据。此外,每张支票必须与属于某家银行的活期账户相关。 现在,我们的应用程序应该允许在这些条件下打印支票:
应用管理的每家银行都有不同的支票布局(即每个字段都有不同的 x、y 位置)。
如果存在付款日期,即使使用相同的相关银行对象,支票布局也会略有变化。但是,从银行到银行,这些更改可能不一样(例如,银行 A 可能会更改日期字段的位置,而银行 B 会更改收款人字段的位置)
有了这些限制,就很难想出一个简单的继承模式,因为没有一致的行为可以跨不同类型的检查进行分解。一种可能的解决方案是避免继承并为每个支票-银行组合创建一个类:
- ChequeNoPaymentDateForBankA 类
- 类 ChequeWithPaymentDateForBankA
- 类 ChequeNoPaymentDateForBankB
- 类 ChequeWithPaymentDateForBankB 等
这些类中的每一个都实现了 print() 方法,该方法从 Bank 对象中获取字段位置并构建支票布局。到目前为止一切都很好,但是这种方法让我有一种奇怪的感觉,因为没有代码重用的空间。我想知道我是否误解了这个问题,也许有更好的方法。由于这根本不是一个新的问题领域,我相信这是一个重新发明轮子的努力。任何见解将不胜感激。
【问题讨论】:
-
如果它们都有相同的组件但坐标不同,你可以考虑在同一个对象中使用不同的构造函数。
-
可能是部分使用了打印的en.wikipedia.org/wiki/Visitor_pattern?
标签: oop design-patterns