1700461610
1700461611
}
1700461612
1700461613
}
1700461614
1700461615
注意看粗体部分,实现了一个接口,并重写了clone方法,大家可能看着这个类有点奇怪,先保留你的好奇,我们继续讲下去,稍后会给你清晰的答案。我们再来看场景Client的变化,如代码清单13-5所示。
1700461616
1700461617
代码清单13-5 修改后的场景类
1700461618
1700461619
public class Client{
1700461620
1700461621
//发送账单的数量,这个值是从数据库中获得
1700461622
1700461623
private static int MAX_COUNT=6;
1700461624
1700461625
public static void main(String[]args){
1700461626
1700461627
//模拟发送邮件
1700461628
1700461629
int i=0;
1700461630
1700461631
//把模板定义出来,这个是从数据中获得
1700461632
1700461633
Mail mail=new Mail(new AdvTemplate());
1700461634
1700461635
mail.setTail(“XX银行版权所有”);
1700461636
1700461637
while(i<MAX_COUNT){
1700461638
1700461639
//以下是每封邮件不同的地方
1700461640
1700461641
Mail cloneMail=mail.clone();
1700461642
1700461643
cloneMail.setAppellation(getRandString(5)+“先生(女士)”);
1700461644
1700461645
cloneMail.setReceiver(getRandString(5)+”@”+getRandString(8)+”.com”);
1700461646
1700461647
//然后发送邮件
1700461648
1700461649
sendMail(cloneMail);
1700461650
1700461651
i++;
1700461652
1700461653
}
1700461654
1700461655
}
1700461656
1700461657
}
1700461658
1700461659
运行结果不变,一样完成了电子广告信的发送功能,而且sendMail即使是多线程也没有关系。注意,看Client类中的粗体字mail.clone()这个方法,把对象复制一份,产生一个新的对象,和原有对象一样,然后再修改细节的数据,如设置称谓、设置收件人地址等。这种不通过new关键字来产生一个对象,而是通过对象复制来实现的模式就叫做原型模式。
[
上一页 ]
[ :1.70046161e+09 ]
[
下一页 ]