设计模式(一)——策略模式
来源:互联网 发布:网络计算机组成 编辑:程序博客网 时间:2024/05/29 02:21
设计模式(一)——策略模式
从今天开始,我将会写一个设计模式系列,当然,不敢说什么独到见解,而是本着一个自我提升的目的的,欢迎拍砖和交流。
本文描述的是策略模式
我们假设有如下场景:
我们使用聊天工具聊天时,可以发送点对点消息(私聊)和点对多消息(群聊),而发送不同的消息执行的操作是不一样的,也就是说我们在不同的场景下(私聊或者群聊)发送消息时会调用不同的发送方法,但是我们只有一个消息发送器(可以理解为发送消息时的发送按钮),我们希望可以通过这消息发送器发送任何类型的消息。
所以如下代码描述了如何使用策略模式实现上述需求:
我们先定义一个消息的公共接口,所有不同类型的消息都实现这个接口,这个接口包含一个发送方法
Java代码
- package com.gy.designpattern.strategy;
- /**
- * ClassName:IMessage <br/>
- * Function: 这是一个消息的接口,所有的消息都要实现这个接口. <br/>
- * Reason: TODO ADD REASON. <br/>
- * Date: 2012-7-3 下午3:09:07 <br/>
- * @author gongyong
- * @version
- * @since JDK 1.6
- * @see
- */
- public interface IMessage {
- /**
- * send:所有的消息都有一个操作,发送. <br/>
- * @author gongyong
- * @since JDK 1.6
- */
- public void send();
- }
然后我们定义两个类实现该接口,分别是一个点对点消息和点对多消息:
Java代码
- package com.gy.designpattern.strategy;
- /**
- * ClassName:P2MMessage <br/>
- * Function: 点对多消息. <br/>
- * Reason: . <br/>
- * Date: 2012-7-3 下午3:15:05 <br/>
- * @author gongyong
- * @version
- * @since JDK 1.6
- * @see
- */
- public class P2MMessage implements IMessage{
- /**
- * 发送给许多人.
- * @see com.gy.designpattern.strategy.IMessage#send()
- */
- @Override
- public void send(){
- System.out.println("这是点对多消息,将发送给许多人");
- }
- }
Java代码
- package com.gy.designpattern.strategy;
- /**
- * ClassName:P2PMessage <br/>
- * Function: 点多点消息. <br/>
- * Reason: TODO ADD REASON. <br/>
- * Date: 2012-7-3 下午3:12:14 <br/>
- * @author gongyong
- * @version
- * @since JDK 1.6
- * @see
- */
- public class P2PMessage implements IMessage{
- /**
- * 发送给单个人.
- * @see com.gy.designpattern.strategy.IMessage#send()
- */
- @Override
- public void send(){
- System.out.println("这是点对点消息,将发送给一个人");
- }
- }
然后定义一个消息发送器
Java代码
- package com.gy.designpattern.strategy;
- /**
- * ClassName:MessageSender <br/>
- * Function: 消息发送器. <br/>
- * Reason: TODO ADD REASON. <br/>
- * Date: 2012-7-3 下午3:18:24 <br/>
- * @author gongyong
- * @version
- * @since JDK 1.6
- * @see
- */
- public class MessageSender {
- /**
- * message:将要使用到的消息.
- * @since JDK 1.6
- */
- private IMessage message;
- /**
- * 构造函数,你要使用哪个消息.
- *
- * @param message
- */
- public MessageSender(IMessage message){
- this.message=message;
- }
- /**
- * send:ok,发送消息. <br/>
- * @author gongyong
- * @since JDK 1.6
- */
- public void send(){
- this.message.send();
- }
- }
最后我们看如何使用这个消息发送器发送不同类型的消息,我们假设有一个用户:
Java代码
- package com.gy.designpattern.strategy;
- /**
- * ClassName:SomeUser <br/>
- * Function: 这就是将发送消息的用户,爱谁谁 <br/>
- * Reason: TODO ADD REASON. <br/>
- * Date: 2012-7-3 下午3:24:02 <br/>
- * @author gongyong
- * @version
- * @since JDK 1.6
- * @see
- */
- public class SomeUser {
- /**
- * main:某个人将依次先发送一条点对点消息,然后发送一条广播消息. <br/>
- * @author gongyong
- * @param args
- * @since JDK 1.6
- */
- public static void main(String[] args){
- //先建立一个消息发送器
- MessageSender messageSender;
- System.out.println("-----发送一条点对点消息-----");
- messageSender=new MessageSender(new P2PMessage()); //创建消息
- messageSender.send();//发送
- System.out.println("-----发送一条点对多消息-----");
- messageSender=new MessageSender(new P2MMessage()); //创建消息
- messageSender.send();//发送
- }
- }
OK,到这里,一个简单的策略模式的实现就完成了,使用策略模式的好处是,我们可以使用这个消息发送器发送任何类型的消息,而你要做的就是定义一个新的消息,该消息实现了IMessage接口,然后通过这个消息发送器就可以调用,其余的都不用考虑。
- 设计模式(一)——策略模式
- 设计模式(一)——策略模式
- head first设计模式(一)——策略模式
- java设计模式(一)—策略模式
- 设计模式(1)—策略模式
- 设计模式—策略模式(二)
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线
- system() exec() passthru()
- TCP三次握手
- 图形化排序算法
- poj 2553 (tarjan求强连通分量+缩点)
- 设计模式(一)——策略模式
- 光学变焦----景深=景深远界-景深近界
- 实习第八天——轻松的一天
- HTTP请求(GET与POST区别)和响应
- linux screen分屏后台运行console
- JPA中级联(casecade)与关联关系的方向有关吗?
- dede标签调用大全 dedecms 隔五行一个分割线
- Android自动测试代码
- centOS5.6 下的nginx+mysql+php+php-fpm安装与配置