策略模式

1)Strategy模式的应用场景一般是:
- 具有多种可能需要实现的算法
- 需要在程序中对算法进行动态切换
-对象的行为需要根据上下文动态的改变。可以考虑使用策略模式.

如:邮件服务器发送邮件,邮件格式有很多种,比如纯文本格式,超文本格式等,我们的程序需要实现

这个功能,就是可以让用户选择不同的邮件格式进行发送。

官方定义:Strategy模式定义一个算法族,并把每一种可能的算法封装成一个类,这些算法可以在应用程序内部被动态替换。此模式让算法的变法不会影响到使用算法的客户。

 

2)UML类图:

 

3)代码:

package test7.strategy;

abstract class MailTemplate {
	//邮件发件人
	private String from;
	//收件人
	private String to;
	//邮件标题
	private String subject;
	//邮件内容
	private String context;
	//通过构造函数传递邮件信息
	public MailTemplate(String _from,String _to,String _subject,String _context){
		this.from = _from;
		this.to = _to;
		this.subject = _subject;
		this.context = _context;
	}
	
	public String getFrom() {
		return from;
	}

	public void setFrom(String from) {
		this.from = from;
	}

	public String getTo() {
		return to;
	}
	
	public void setTo(String to) {
		this.to = to;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public void setContext(String context){
		this.context = context;
	}
	//邮件都有内容
	public String getContext(){
		return context;
	}
}

class TextMail extends MailTemplate {

	public TextMail(String _from, String _to, String _subject, String _context) {
		super(_from, _to, _subject, _context);
	}

	public String getContext() {
		//文本类型则设置邮件的格式为:text/plain
		String context = "\nContent-Type: text/plain;charset=GB2312\n" +super.getContext();
		//同时对邮件进行base64编码处理,这里用一句话代替
		context = context + "\n邮件格式为:文本格式";
		return context;
	}
}

class HtmlMail extends MailTemplate {

	public HtmlMail(String _from, String _to, String _subject, String _context) {
		super(_from, _to, _subject, _context);
	}

	public String getContext(){
		//超文本类型则设置邮件的格式为:multipart/mixed
		String context = "\nContent-Type: multipart/mixed;charset=GB2312\n"+super.getContext();
		//同时对邮件进行HTML检查,是否有类似未关闭的标签
		context = context + "\n邮件格式为:超文本格式";
		return context;
	}
}

class MailServer {
	//发送的是哪封邮件
	private MailTemplate m;
	public MailServer(MailTemplate _m){
		this.m  = _m;
	}
	//发送邮件
	public void sendMail(){
		System.out.println("====正在发送的邮件信息====");
		//发件人
		System.out.println("发件人:" + m.getFrom());
		//收件人
		System.out.println("收件人:" + m.getTo());
		//标题
		System.out.println("邮件标题:" + m.getSubject() );
		//邮件内容
		System.out.println("邮件内容:" + m.getContext());
	}
}


public class Application {
		
		public static void main(String[] args) {
			//创建一封TEXT格式的邮件
			MailTemplate m = new HtmlMail("a@a.com","b@b.com","外星人攻击地球了","结局是外星人被中国人熬汤炖着吃了!");
			//创建一个Mail发送程序
			MailServer mail = new MailServer(m);
			//发送邮件
			mail.sendMail();
		}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值