`
gong1208
  • 浏览: 559287 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式(一)——策略模式

阅读更多

设计模式(一)——策略模式

 

本文描述的是策略模式

我们假设有如下场景:

         我们使用聊天工具聊天时,可以发送点对点消息(私聊)和点对多消息(群聊),而发送不同的消息执行的操作是不一样的,也就是说我们在不同的场景下(私聊或者群聊)发送消息时会调用不同的发送方法,但是我们只有一个消息发送器(可以理解为发送消息时的发送按钮),我们希望可以通过这消息发送器发送任何类型的消息。

所以如下代码描述了如何使用策略模式实现上述需求:

我们先定义一个消息的公共接口,所有不同类型的消息都实现这个接口,这个接口包含一个发送方法

 

Java代码 
  1. package com.gy.designpattern.strategy;  
  2. /** 
  3.  * ClassName:IMessage <br/> 
  4.  * Function: 这是一个消息的接口,所有的消息都要实现这个接口. <br/> 
  5.  * Reason:   TODO ADD REASON. <br/> 
  6.  * Date:     2012-7-3 下午3:09:07 <br/> 
  7.  * @author   gongyong 
  8.  * @version 
  9.  * @since    JDK 1.6 
  10.  * @see 
  11.  */  
  12. public interface IMessage {  
  13.   
  14.     /** 
  15.      * send:所有的消息都有一个操作,发送. <br/> 
  16.      * @author gongyong 
  17.      * @since JDK 1.6 
  18.      */  
  19.     public void send();  
  20.   
  21. }  

 

 然后我们定义两个类实现该接口,分别是一个点对点消息和点对多消息:

 

Java代码 
  1. package com.gy.designpattern.strategy;  
  2. /** 
  3.  * ClassName:P2MMessage <br/> 
  4.  * Function: 点对多消息. <br/> 
  5.  * Reason:   . <br/> 
  6.  * Date:     2012-7-3 下午3:15:05 <br/> 
  7.  * @author   gongyong 
  8.  * @version 
  9.  * @since    JDK 1.6 
  10.  * @see 
  11.  */  
  12. public class P2MMessage implements IMessage{  
  13.   
  14.     /** 
  15.      * 发送给许多人. 
  16.      * @see com.gy.designpattern.strategy.IMessage#send() 
  17.      */  
  18.     @Override  
  19.     public void send(){  
  20.   
  21.         System.out.println("这是点对多消息,将发送给许多人");  
  22.   
  23.     }  
  24.   
  25. }  

 

 

Java代码 
  1. package com.gy.designpattern.strategy;  
  2. /** 
  3.  * ClassName:P2PMessage <br/> 
  4.  * Function: 点多点消息. <br/> 
  5.  * Reason:   TODO ADD REASON. <br/> 
  6.  * Date:     2012-7-3 下午3:12:14 <br/> 
  7.  * @author   gongyong 
  8.  * @version 
  9.  * @since    JDK 1.6 
  10.  * @see 
  11.  */  
  12. public class P2PMessage implements IMessage{  
  13.   
  14.     /** 
  15.      * 发送给单个人. 
  16.      * @see com.gy.designpattern.strategy.IMessage#send() 
  17.      */  
  18.     @Override  
  19.     public void send(){  
  20.   
  21.         System.out.println("这是点对点消息,将发送给一个人");  
  22.   
  23.     }  
  24.   
  25. }  

 然后定义一个消息发送器

 

Java代码 
  1. package com.gy.designpattern.strategy;  
  2. /** 
  3.  * ClassName:MessageSender <br/> 
  4.  * Function: 消息发送器. <br/> 
  5.  * Reason:   TODO ADD REASON. <br/> 
  6.  * Date:     2012-7-3 下午3:18:24 <br/> 
  7.  * @author   gongyong 
  8.  * @version 
  9.  * @since    JDK 1.6 
  10.  * @see 
  11.  */  
  12. public class MessageSender {  
  13.     /** 
  14.      * message:将要使用到的消息. 
  15.      * @since JDK 1.6 
  16.      */  
  17.     private IMessage message;  
  18.   
  19.     /** 
  20.      * 构造函数,你要使用哪个消息. 
  21.      * 
  22.      * @param message 
  23.      */  
  24.     public MessageSender(IMessage message){  
  25.         this.message=message;  
  26.     }  
  27.   
  28.   
  29.     /** 
  30.      * send:ok,发送消息. <br/> 
  31.      * @author gongyong 
  32.      * @since JDK 1.6 
  33.      */  
  34.     public void send(){  
  35.         this.message.send();  
  36.     }  
  37.   
  38. }  

 最后我们看如何使用这个消息发送器发送不同类型的消息,我们假设有一个用户:

 

Java代码 
  1. package com.gy.designpattern.strategy;  
  2. /** 
  3.  * ClassName:SomeUser <br/> 
  4.  * Function: 这就是将发送消息的用户,爱谁谁 <br/> 
  5.  * Reason:   TODO ADD REASON. <br/> 
  6.  * Date:     2012-7-3 下午3:24:02 <br/> 
  7.  * @author   gongyong 
  8.  * @version 
  9.  * @since    JDK 1.6 
  10.  * @see 
  11.  */  
  12. public class SomeUser {  
  13.   
  14.     /** 
  15.      * main:某个人将依次先发送一条点对点消息,然后发送一条广播消息. <br/> 
  16.      * @author gongyong 
  17.      * @param args 
  18.      * @since JDK 1.6 
  19.      */  
  20.     public static void main(String[] args){  
  21.   
  22.         //先建立一个消息发送器  
  23.         MessageSender messageSender;  
  24.   
  25.         System.out.println("-----发送一条点对点消息-----");  
  26.         messageSender=new MessageSender(new P2PMessage()); //创建消息  
  27.         messageSender.send();//发送  
  28.   
  29.   
  30.         System.out.println("-----发送一条点对多消息-----");  
  31.         messageSender=new MessageSender(new P2MMessage()); //创建消息  
  32.         messageSender.send();//发送  
  33.   
  34.     }  
  35.   
  36. }  
 

OK,到这里,一个简单的策略模式的实现就完成了,使用策略模式的好处是,我们可以使用这个消息发送器发送任何类型的消息,而你要做的就是定义一个新的消息,该消息实现了IMessage接口,然后通过这个消息发送器就可以调用,其余的都不用考虑。

分享到:
评论

相关推荐

    java设计模式之——策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式主要通过定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户而变化。这种模式的核心是策略...

    设计模式——策略模式

    策略模式是一种常用的设计模式,它定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。策略模式的主要优点是它可以使得算法的变化独立于使用算法的客户,从而提高系统的...

    设计模式——策略模式 & 单例模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式将算法族封装在独立的类中,使得它们可以互相替换。策略类之间可以相互替换,用户可以根据需求选择合适的策略,而无需修改代码。策略模式通常...

    深入浅出设计模式一——Duck设计(策略模式)

    《深入浅出设计模式一——Duck设计(策略模式)》 在软件开发中,设计模式是一种被广泛接受并重复使用的解决方案,它针对特定问题提供了一种通用的、可复用的设计方案。策略模式是其中一种行为设计模式,用于定义...

    设计模式实现——观察者模式

    在《设计模式实现——观察者模式》这篇博客中,作者可能详细解释了观察者模式的概念、结构以及其在实际编程中的应用。以下是对观察者模式的详细阐述: 1. **模式定义**:观察者模式是一种对象行为型模式,它允许...

    设计模式浅谈1——策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件工程中,我们经常遇到需要根据不同条件或场景动态地改变算法的情况。策略模式就是为了解决这类问题而诞生的,它允许我们用不同的策略(即算法)...

    设计模式之美——教你写出高质量代码

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的经验总结。"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式...

    设计模式——原版的设计模式

    策略模式定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,策略对象改变算法的执行策略;职责链模式避免将请求的发送者和接收者耦合在一起,而是将这些对象连成一条链,并沿着这条链传递请求,直到有...

    设计模式——GFour

    《设计模式——GFour》是一本深受IT从业者喜爱的经典书籍,尤其在C++开发者中具有广泛影响力。设计模式是软件工程领域中的一种最佳实践,它总结了在特定情境下解决问题的常见方法,使得代码可读性更强,复用性更高,...

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    设计模式——单例模式

    **设计模式——单例模式** 在软件工程中,设计模式是一种在特定场景下解决常见问题的标准方案,可以被复用并提升代码质量。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式...

    EJB设计模式概述——讲解EJB设计模式的重要性及常用的模式

    EJB(Enterprise JavaBeans)设计模式是解决在Java EE平台中使用EJB组件遇到的问题和挑战的一种策略。这些模式旨在优化系统性能、可扩展性、可维护性,以及提高组件的重用性。在大型、复杂的项目中,尤其在团队协作...

    设计模式——基于C#的工程化实现及扩展

    ### 设计模式——基于C#的工程化实现及扩展 #### 概述 本书旨在向读者展示如何利用C# 2.0语法有效地实现和应用设计模式,使其不仅仅局限于简单的例子,而是能够在实际工程项目中发挥重要作用。全书分为七个部分,...

    设计模式解读之一: 策略模式——鸭子游戏.doc

    设计模式解读之一:策略模式——鸭子游戏 策略模式是指定义amily of algorithms,encapsulate each one,and make them interchangeable,这种模式让我们可以在不修改原始代码的情况下,灵活地更换算法。下面我们来...

    设计模式-Java语言中的应用(pdf)

    《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...

Global site tag (gtag.js) - Google Analytics