单一职责原则说明,例如,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() {
...
}
}
}
什么技术或设计模式可用于分离出印刷reponsibility?
思路:
- 与测试为
Invoice
每个子类,并运行相应的印码一个伟大的大if
声明一个单独的类。这似乎是错误的。 - 访客模式。问题在于访问者接口需要存在于核心层中,并且引用了定制层中的类。我希望能够在修改Core层的Customized图层中添加新的子类。
有趣的阅读!该解决方案使用多继承和dynamic_cast在C++中提供。我恰好在使用C#,但我想我仍然可以通过将抽象访问类更改为接口来使用它。 – 2010-11-03 00:18:16
查看[这里](http://codecrafter.blogspot.ca/2012/12/the-acyclic-visitor-pattern.html)为C#示例。 – 2012-12-25 05:55:47