Mar*_*ijn 3 c# design-patterns
我有一种情况,我必须发送邮件A,有时我必须发送邮件B,但也有一种情况,我想发送邮件,其中包括邮件A和邮件B的组合.
例如邮件A的主题是"邮件主题A".邮件B的主题是"这是邮件B的主题".现在我的情况是我希望这个作为我的主题:'邮件主题A /这是邮件B的主题'
我怎样才能使用OO方式实现这一目标?
我已经为mailA和mailB提供了两个单独的类.
假设你有一个基类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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是Composite模式的缩写实现."缩写",因为它不包含添加,删除或枚举子项的方法.如果要添加此功能,只需CompositeMail另外实现ICollection<Mail>.
您可以像这样实例化它:
var compositeMail = new CompositeMail(mailA, mailB);
Run Code Online (Sandbox Code Playgroud)
您可以在使用普通邮件的任何地方使用此实例,因为它源自Mail您在其他地方使用的类.
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |