打字猴:1.700479536e+09
1700479536 ====正在发送的邮件信息====
1700479537
1700479538 发件人:a@a.com
1700479539
1700479540 收件人:b@b.com
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
[ 上一页 ]  [ :1.700479536e+09 ]  [ 下一页 ]