1700479541
1700479542
邮件标题:外星人攻击地球了
1700479543
1700479544
邮件内容:
1700479545
1700479546
Content-Type:multipart/mixed;charset=GB2312
1700479547
1700479548
结局是外星人被地球人打败了!
1700479549
1700479550
邮件格式为:超文本格式
1700479551
1700479552
当然,如果想产生一封文本格式的邮件,只要稍稍修改一下场景类就可以了:new HtmlMail修改为new TextMail,读者可以自行实现,非常简单。在该场景中,我们使用策略模式实现两种算法的自由切换,它提供了这样的保证:封装邮件的两种行为是可选择的,至于选择哪个算法是由上层模块决定的。策略模式要完成的任务就是提供两种可以替换的算法。
1700479553
1700479554
1700479555
1700479556
1700479557
设计模式之禅 33.1.2 桥梁模式实现邮件发送
1700479558
1700479559
桥梁模式关注的是抽象和实现的分离,它是结构型模式,结构型模式研究的是如何建立一个软件架构,下面我们就来看看桥梁模式是如何构件一套发送邮件的架构的,如图33-3所示。
1700479560
1700479561
类图中我们增加了SendMail和Postfix两个邮件服务器来实现类,在邮件模板中允许增加发送者标记,其他与策略模式都相同。我们在这里已经完成了一个独立的架构,邮件有了,发送邮件的服务器也具备了,是一个完整的邮件发送程序。需要读者注意的是,SendMail类不是一个动词行为(发送邮件),它指的是一款开源邮件服务器产品,一般*nix系统的默认邮件服务器就是SendMail;Postfix也是一款开源的邮件服务器产品,其性能、稳定性都在逐步赶超SendMail。
1700479562
1700479563
1700479564
1700479565
1700479566
图33-3 桥梁模式实现邮件发送的类图
1700479567
1700479568
我们来看代码实现,邮件模板仅仅增加了一个add方法,如代码清单33-6所示。
1700479569
1700479570
代码清单33-6 邮件模板
1700479571
1700479572
public abstract class MailTemplate{
1700479573
1700479574
/*
1700479575
1700479576
*该部分代码不变,请参考代码清单33-1
1700479577
1700479578
*/
1700479579
1700479580
//允许增加邮件发送标志
1700479581
1700479582
public void add(String sendInfo){
1700479583
1700479584
context=sendInfo+context;
1700479585
1700479586
}
1700479587
1700479588
}
1700479589
1700479590
文本邮件、超文本邮件都没有任何改变,如代码清单33-2、33-3所示,这里不再赘述。我们来看邮件服务器,也就是桥梁模式的抽象化角色,如代码清单33-7所示。
[
上一页 ]
[ :1.700479541e+09 ]
[
下一页 ]