策略模式的定义
策略模式比较简单,是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
模型:
-
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;另外还有策略枚举的应用大家感兴趣的可以自己看一下;具体的应用我会另外写一篇文章来讲。
定义和优缺点参考网上信息
相关推荐
设计模式详解,设计模式有助于代码水平的提高,实现方式为JAVA语言,通俗易懂,mobi格式,适合kindle
23种设计模式(通俗易懂篇),抛开繁琐的代码,抛开烦人的官方描述,过来看看这玩意,包你有所收获
java24种设计模式详细讲解,内容讲解通俗易懂,附有实例讲解
本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA...
极好的资料,读过后 PHP上了一个台阶,对设计模式和面向对象思想进行了详细的讲解,简单易懂
里面包含里一个《JAVA设计模式.chm》 文件。 介绍了Java里面的常用的24个模式,文件层次结构清晰, 通俗易懂,很适合学习设计模式。希望对你用用!!!
多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易...
多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易...
非常详细的c#设计模式分析及其例程,通俗易懂,非常适合正在学习设计模式研究学习之用
本文以通俗易懂的语言,详细介绍了23种设计模式。通过比喻和简单的例子,解释了每种设计模式的工作原理和用途,旨在帮助初学者理解并应用这些模式,以提高代码的质量和可维护性。 **适用人群**: 这篇文章适合编程...
此文件包括两部pdf文件,一部适合初学者,内容通俗易懂。一部适合需要设计模式提高者。
java 多线程设计模式, 一个很不错的学习java多线程的书,并配有源代码。是学习java多线程的很好的参考书,易懂且有深度。
23种设计模式代码示例讲解, 简单,易懂
JAVA的23种设计模式,要详细的解释以及简单易懂的例子和备注
java23种设计模式,每种设计模式代码示例详解,源码详细,通俗易懂。
Java的设计模式详解,通俗易懂,轻松掌握设计模式,在Java技术上进阶
:hot_beverage: 用Java实现的设计模式〜 配套博客学习笔记: ://yubuntu0109.github.io/tags/design-and-pattern/ 参考书籍(推荐): 《Java设计模式 - 刘伟》 , 《图解设计模式 - [日]结城浩》 创建型模式 :...
很适合初学软件设计模型,总结的很全,简单通俗易懂 5个创建模式: 1、Abstract Factory 抽象工厂 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 2、Builder 生成器 将一个复杂对象的...