我正在学习《Head First设计模式》,并希望能立即将其应用于实践中。
我正在编写一段代码,将一个应用程序与其他应用程序连接起来。实际上,我需要生成一个包含XML文件的电子邮件,并通过电子邮件发送它。但是未来可能需要其他一些内容。
因此,我确定了“变化的事物”: - 传输的数据 - 传输方式(可以是电子邮件,也可以是FTP或另一种数据交换的Web服务)
所以,我: - 创建了一个抽象类DataObject - 创建了一个接口ITransmissionMethod - 创建了一个dataExchange抽象类:
而 SendViaMail 就像是…
你认为这种方法怎么样?现在我真正想做的是在DataExchange中创建一个抽象方法,应该长这个样子:
因此,我确定了“变化的事物”: - 传输的数据 - 传输方式(可以是电子邮件,也可以是FTP或另一种数据交换的Web服务)
所以,我: - 创建了一个抽象类DataObject - 创建了一个接口ITransmissionMethod - 创建了一个dataExchange抽象类:
abstract class DataExchange<T,U>
{
private T DataObject;
private U SendMethod;
}
而 SendViaMail 就像是…
class SendViaMail : ISendMethod<System.Net.Mail.Attachment>
{
public override void Send(System.Net.Mail.Attachment dataItem)
{
throw new NotImplementedException();
}
}
现在,我可以创建如下的类:
class MyExchange : DataExchange<MyDataObject,SendViaMail> { }
你认为这种方法怎么样?现在我真正想做的是在DataExchange中创建一个抽象方法,应该长这个样子:
private abstract [the type of the T in ISendMethod<T>] PrepareObjectForSending(T dataObject) {
}
在Visual Studio中,我需要实现一个类似于以下的方法:
private abstract System.Net.Mail.Attachment PrepareObjectForSendingMyDataObject dataObject) {
// Serialize XML file and make it into attachment object
}
这不是很好吗?但你们对这种方法有什么想法?在未来,人们可以创建新的dataObjects和新的sendmethods,代码仍将有效。我一直在尝试的是:针对接口进行编程并提取可变部分。你觉得怎样?