你应该分开这些责任(例如老师的发送能力)。你可以通过使用策略模式来做到这一点。
因此,老师有一个额外的财产出版,作为一个接口。该实现可以有多个实现(例如,对于没有发布功能的教师或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#类。什么会给他们这种行为,例如发布?我想这是通过查看策略模式来回答的,但如果您能够勾画出代码的外观,这将非常可爱。 –