單一職責原則說明,例如,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