我有一种情况,我必须发送邮件A,有时我必须发送邮件B,但也有一些情况,我想发送一封由邮件A和邮件B组成的邮件。
例如,邮件A的主题是‘邮件A的主题’。邮件B的主题是“这是邮件B的主题”。现在我有这样的情况:‘邮件A的主题/这是邮件B的主题’
我如何使用面向对象的方式来实现这一点呢?
我已经为mailA和mailB创建了两个独立的类。
发布于 2013-04-12 19:05:57
假设您有一个基类Mail
或一个接口IMail
,它有两个属性Subject
和Body
,您可以创建一个派生类CompositeMail
public class CompositeMail : Mail
{
private readonly List<Mail> _mails;
public CompositeMail(params Mail[] mails) : this(mails.AsEnumerable())
{
}
public CompositeMail(IEnumerable<Mail> mails)
{
if(mails == null) throw new ArgumentNullException("mails");
_mails = mails.ToList();
}
public override string Subject
{
get { return string.Join("/", _mails.Select(x => x.Subject)); }
}
public override string Body
{
get
{
return string.Join(Environment.NewLine, _mails.Select(x => x.Body));
}
}
}
这是Composite pattern的简短实现。"Abbreviated",因为它不包含add、remove或枚举子对象的方法。如果您想添加此功能,只需让CompositeMail
另外实现ICollection<Mail>
即可。
你可以像这样实例化它:
var compositeMail = new CompositeMail(mailA, mailB);
您可以在使用普通邮件的任何地方使用此实例,因为它派生自您在其他地方使用的Mail
类。
https://stackoverflow.com/questions/15969654
复制相似问题