你應該分開這些責任(例如老師的發送能力)。你可以通過使用策略模式來做到這一點。
因此,老師有一個額外的財產出版,作爲一個接口。該實現可以有多個實現(例如,對於沒有發佈功能的教師或DefaultPublishing,NoPublishing)。每位教師可以將其Publishing屬性設置爲NoPublishing或DefaultPublishing。如果需要,甚至可以改變運行時間。
一個例子:
public class Teacher
{
public IPublishing Publishing { get; }
}
interface IPublishing
{
void Send();
}
public NoPublishing : IPublishing
{
public void Send()
{
// Implementatation
}
}
public PublishDefault : IPublishing
{
public void Send()
{
// Send a message the default way
}
}
創建一個老師:
var teacher = new Teacher();
創建出版商策略。
var defaultStrategy = new PublishDefault();
將其連接
teacher.Publishing = defaultStrategy;
現在,您可以通過發送消息:
teacher.Publishing.Send();
根據其發佈的策略已經連接它要麼沒有任何響應或送東西的默認方式。
您只需要實例化每個使用的發佈策略一次,並將其重複用於每個教師(或者甚至其他需要能夠發送的類)。
當您需要其他發佈功能時,只需添加一個新策略(例如SmsPublishing,LetterPublishing等)。
如果需要的話,您甚至可以隨時更改策略(通過重新分配發布屬性)。
爲什麼不直接在教師中實現接口?
- 問題分離原則:IPublish包含一個特定的和不同的責任。
- 可能IPublish包含稍後可用於不同類或甚至其他項目的功能,因此它更具可重用性。
- 由於IPublish不需要關於教師的任何知識,所以測試更容易。
- 實時更改教師發佈行爲的可能性。
(注意:這裏沒有編譯器,所以代碼僅用於解釋目的)。
如果你對每個用戶類型有不同的類,你會用行爲(用接口完成)來「裝飾」類,這會給他們發佈等的屬性。 –
恐怕我不能正確理解你的問題。 –
我的問題是:你會如何實現這一點?假設您爲每種用戶類型都有不同的C#類。什麼會給他們這種行爲,例如發佈?我想這是通過查看策略模式來回答的,但如果您能夠勾畫出代碼的外觀,這將非常可愛。 –