`
安卓干货铺
  • 浏览: 36366 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

设计模式(11)-策略模式详解(易懂)

阅读更多

策略模式的定义

策略模式比较简单,是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

模型:

  • Context:上下文角色,起到封装的作用,持有一个Strategy对象的引用

  • Strategy:策略角色(抽象)  通常为接口

  • ConcreteStrategy:具体的策略角色

实例说明

策略模式很好理解,这里拿百度网盘举例大家应该更明白了。比如现在的百度网盘普通的用户没有额外的空间,会员会额外的获得2T空间 ,而超级会员额外获得5T空间+各种福利。这也是一种策略,下面用代码演示一下:

1.Strategy,抽象的策略,也就是获取的额外的空间

public interface AbstractStrategy {
   //获取额外空间的方法
   public  void  getExSpace();
}

 

2.ConcreteStrategy,也就是普通用户,会员,超级会员

public class OrdinaryUser implements AbstractStrategy{
   
   @Override
   public void getExSpace() {
       Log.d("qzs","普通用户没有额外的空间获取");
   }
}

 

public class Vip implements AbstractStrategy {
   @Override
   public void getExSpace() {
       Log.d("qzs","会员用户有2T额外的空间获取");
   }
}

 

public class SuperVip implements AbstractStrategy {
   @Override
   public void getExSpace() {
       Log.d("qzs","超级会员用户有5T额外的空间获取");
   }
}

 

3.Context,上下文,为了封装

public class SpaceContext {
   private  AbstractStrategy abstractStrategy;

   public  SpaceContext(AbstractStrategy abstractStrategy){
       this.abstractStrategy=abstractStrategy;
   }
   //调用抽象策略角色中的方法
   public void getExSpace(){
       this.abstractStrategy.getExSpace();
   }
}

 

4.调用:

       SpaceContext spaceContext;
       //如果是普通用户
       spaceContext=new SpaceContext(new OrdinaryUser());
       spaceContext.getExSpace();
       //如果是会员
       spaceContext=new SpaceContext(new Vip());
       spaceContext.getExSpace();
       //如果是超级会员
       spaceContext=new SpaceContext(new SuperVip());
       spaceContext.getExSpace();

 

运行结果:

策略模式的优缺点及其他

1.优点

  • 策略模式提供了管理相关的算法族的办法,算法可以切换

  • 避免使用多重条件转移语句

2.缺点

  • 客户端知道所有的策略类,并自行决定使用哪一个策略类。策略类完成暴露了

  • 策略类有时会非常多

3.适用场景

  • 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。

  • 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。

  • 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

强调:策略模式在Android中的应用比较典型是Adapter;另外还有策略枚举的应用大家感兴趣的可以自己看一下;具体的应用我会另外写一篇文章来讲。

定义和优缺点参考网上信息

0
0
分享到:
评论

相关推荐

    java多线程设计模式详解(PDF及源码)

    本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA...

    23种设计模式(通俗易懂篇)

    ### 23种设计模式(通俗易懂篇) #### 创建型模式 1. **Factory(工厂模式)** - **应用场景**:当你需要为用户提供多种选择时,例如选择不同的餐厅来满足不同用户对食物的偏好。 - **原理**:在工厂模式中,...

    设计模式_简单易懂的例子,且很有意思

    ### 设计模式详解 设计模式是在软件开发过程中针对常见的问题所总结出来的最佳实践,它能够帮助开发者更加高效地解决问题,并提高代码的复用性、扩展性和维护性。本篇文章将重点介绍四种常用的设计模式:策略模式、...

    java设计模式的 3本书 1 ppt

    最后,"23种设计模式详解.ppt"可能是一个包含幻灯片形式的教程,它可能以简洁明了的方式展示了23种设计模式,每种模式的关键点、示例代码和应用场景可能都有所提及,对于快速回顾或教学来说非常方便。 通过阅读这些...

    node.js 设计模式 英文版

    3. **设计模式详解**: - 深入分析各种设计模式,如工厂模式、单例模式、装饰者模式等,并探讨它们在Node.js中的应用场景。 - 通过实例展示如何在实际项目中应用这些模式来解决问题。 4. **构建模块化和可扩展的...

    英文原版的设计模式详解,Patterns in C 2, STATE

    "状态机设计模式详解" 在程序设计中,状态机是一种非常重要的概念。状态机是指程序在其生命周期内经过的一系列状态的抽象表示。今天,我们来讨论状态机的设计模式,特别是使用C语言实现状态机的策略。 传统的解决...

    java与模式-清晰书签版

    《Java与模式-清晰书签版》是一份包含多种Java设计模式详解的资源包,旨在帮助开发者深入理解和应用设计模式。这份资源集成了多种格式的文档,包括详细的文本描述、图表解析以及实际代码示例,使得学习过程更加直观...

    企业信息化管理系统--管家婆软件详解.doc

    软件的设计非常人性化,摒弃了复杂的会计术语,而是采用了通俗易懂的方式,让非专业的会计人员也能迅速上手操作。这种“傻瓜会计”的理念,大大降低了企业实施信息化管理的门槛。 《管家婆》软件对不同行业有着极强...

    深入浅出的设计模式

    在本书中,"HEAD_FIRST设计模式(中文版)"采用了易懂且生动的方式,将复杂的概念以图文并茂的形式呈现,使得读者能够更轻松地理解和掌握设计模式。以下是对几个关键设计模式的详解: 1. **工厂模式**:它是创建型...

    java设计模式-单例.pdf

    ### Java设计模式——单例模式详解 #### 一、单例模式概述 单例模式是设计模式中的一个重要组成部分,属于创建型模式之一。其主要作用是确保某个类仅有一个实例存在,并提供一个全局访问该实例的方法。这在很多场景...

    java多线程设计模式详解part2

    多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易...

    java多线程设计模式详解part1

    多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易...

    Java多线程设计模式详解

    书中不仅通过浅显易懂的文字和实例介绍了这些模式,还提供了丰富的UML图示和代码示例,以帮助读者更深入地理解每个设计模式的运用和实现。此外,本书还包括了Java线程基础内容的介绍、附录内容以及对每个设计模式的...

    小学生也能看懂的!!!编程小白必看:23种设计模式轻松入门!详解(全23种).zip

    本文以通俗易懂的语言,详细介绍了23种设计模式。通过比喻和简单的例子,解释了每种设计模式的工作原理和用途,旨在帮助初学者理解并应用这些模式,以提高代码的质量和可维护性。 **适用人群**: 这篇文章适合编程...

    参考资料-详解差模电压和共模电压-简单易懂.zip

    在电子工程领域,差模电压和共模电压是两种重要的概念,主要应用于...在实际工作中,通过阅读"详解差模电压和共模电压-简单易懂.pdf"这份参考资料,可以深入学习这两个概念,掌握它们在电路设计中的应用和应对策略。

Global site tag (gtag.js) - Google Analytics