???????策略模式(Strategy)属于对象行为模式。其作用是针对一组算法,将每个算法封装到具有共同接口的独立类中,从而使它们可以相互替换。
???????策略模式(Strategy pattern)中涉及到三个角色:
?????有这样一个需要,在一个项目中,如果用户的认证情况不符合要求需要发送消息提醒用户需要在多长时间内完成认证。在最后今天需要每天发送一次提醒,而有的消息不是那么紧急值需要每周发送一次。还有一些特殊场景需要个性化定制。
这样我们可以通过策略模式实现。
??????
/** * * @author zhangwei_david * @version $Id: SendStrategy.java, v 0.1 2014年11月6日 下午8:49:09 zhangwei_david Exp $ */ public interface SendStrategy { public boolean send(Message msg); } /** * * @author zhangwei_david * @version $Id: OnceAweek.java, v 0.1 2014年11月6日 下午9:04:59 zhangwei_david Exp $ */ public class OnceAweek implements SendStrategy { /** * @see com.cathy.demo.pattern.strategy.SendStrategy#send(com.cathy.demo.pattern.strategy.Message) */ public boolean send(Message msg) { System.out.println("每周一次"); return true; } } /** * 每天一次 * @author zhangwei_david * @version $Id: OnceADay.java, v 0.1 2014年11月6日 下午8:53:07 zhangwei_david Exp $ */ public class OnceADay implements SendStrategy { /** * @see com.cathy.demo.pattern.strategy.SendStrategy#send(com.cathy.demo.pattern.strategy.Message) */ public boolean send(Message msg) { System.out.println("每天一次"); return true; } } /** * * @author zhangwei_david * @version $Id: Message.java, v 0.1 2014年11月6日 下午8:50:45 zhangwei_david Exp $ */ public class Message { } /** * * @author zhangwei_david * @version $Id: SmsSender.java, v 0.1 2014年11月6日 下午8:55:18 zhangwei_david Exp $ */ public class SmsSender { private SendStrategy sendStrategy; public SmsSender(SendStrategy sendStrategy) { super(); this.sendStrategy = sendStrategy; } /** * 发送消息 * * @param msg */ public void sendSMS(Message msg) { sendStrategy.send(msg); } } /** * * @author zhangwei_david * @version $Id: Clinet.java, v 0.1 2014年11月6日 下午9:05:36 zhangwei_david Exp $ */ public class Clinet { /** * * @param args */ public static void main(String[] args) { new SmsSender(new OnceADay()).sendSMS(new Message()); new SmsSender(new OnceAweek()).sendSMS(new Message()); new SmsSender(new SendStrategy() { public boolean send(Message msg) { System.out.println("一天两次"); // return true; } }).sendSMS(new Message()); } }
?策略模式有很多优点同样也有缺点。
优点有:
缺点:
?
?
?
Java 设计模式-策略模式(Strategy Pattern)
原文:http://zhangwei-david.iteye.com/blog/2153216