例如,单一职责原则说,一个Invoice
类不应包含打印自身的代码。打印应该被分成不同的类。
但是假设您Invoice
在软件的不同层中有一个类层次结构:
namespace CoreLayer {
public class Invoice {
public virtual void Print() {
...
}
}
}
namespace CustomizedLayer {
public class LaborInvoice : Invoice {
public override void Print() {
...
}
}
public class AccountInvoice : Invoice {
public override void Print() {
...
}
}
}
可以使用哪些技术或设计模式来分离印刷责任?
想法:
- 一个单独的类,带有一个很大的
if
语句,用于测试每个子类Invoice
并运行适当的打印代码。这似乎是错误的。 - 访客模式。问题是访问者界面需要存在于核心层中,并引用自定义层中的类。我希望能够通过修改核心层在自定义层中添加新的子类。