为实现一个目的采用不同的方式都可实现,具体看要采取哪种方式。

//接口
  public interface Strategy
  {
      public void algorithmInterface();
  }

  public class  ConcreStrategyA implments Strategy
  {
      public void  algorithmInterface()

  {

  System.out.println("策略A开始执行");

  }
  }

  public class  ConcreStrategyB implments Strategy
  {
      public void  algorithmInterface()

  {

  System.out.println("策略B开始执行");

  }
  }

public class Context {
private Strategy strategy; public Context(Strategy strategy){
this.strategy = strategy;
} public int executeStrategy(){
return strategy.doOperation();
}
}
客户端调用:
Context context = new Context(new ConcreStrategyA());
context.executeStrategy();

结果:策略A开始执行
Context context = new Context(new ConcreStrategyB());
context.executeStrategy();
结果:策略B开始执行

策略模式 VS. 简单工厂

策略模式是优化简单工厂得到的,在两种模式都适合时,那么理所应当的,策略模式要比简单工厂强。

但是,简单工厂的应用比较广泛。策略模式是封装变化的,也就是说在遇到“在不同时间应用不同业务”这样的变化的情况时,应用策略模式来封装这些变化,使得客户端耦合度降低,此种情况下会比简单工厂强。

从以上的两幅图中,大家也可以看出不同来,简单工厂是依赖,而策略模式是聚合。简单工厂依赖了所有子类,而父类聚合出了Context,显然,策略模式的耦合要明显降低

两者的区分:
策略模式和简单工厂模式看起来非常相似,都是通过多态来实现不同子类的选取,这种思想应该是从程序的整体来看得出的。如果从使用这两种模式的角度来看的话,我们会发现在简单工厂模式中我们只需要传递相应的条件就能得到想要的一个对象,然后通过这个对象实现算法的操作。而策略模式,使用时必须首先创建一个想使用的类对象,然后将该对象最为参数传递进去,通过该对象调用不同的算法。在简单工厂模式中实现了通过条件选取一个类去实例化对象,策略模式则将选取相应对象的工作交给模式的使用者,它本身不去做选取工作。

参考文章:https://blog.csdn.net/zhangmeihong2/article/details/42365097,

     https://blog.csdn.net/fwj380891124/article/details/7552305

 
 

策略模式(Strategy )的更多相关文章

  1. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...

  2. 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...

  3. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

  4. 设计模式 - 策略模式(Strategy Pattern) 具体解释

    策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...

  5. HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern)

    策略模式(Strategy Pattern): 定义了了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户端. 第一个设计原则:找出应用中可能需要变化之处,把他们独立 ...

  6. 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)

    原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...

  7. 反馈法学习设计模式(一)——策略模式Strategy Pattern

    简介(Introduction) 之前学习Java8实战时,遇到一个很好的策略模式示例.便想着借着这个示例结合反馈式的方法来,学习策略设计模式,也以便后面反复琢磨学习. 首先我们通过练习,逐步写出符合 ...

  8. 策略模式 Strategy 政策Policy 行为型 设计模式(二十五)

    策略模式 Strategy   与策略相关的常见词汇有:营销策略.折扣策略.教学策略.记忆策略.学习策略.... “策略”意味着分情况讨论,而不是一概而论 面对不同年龄段的人,面对不同的商品,必然将会 ...

  9. 策略模式-Strategy(Java实现)

    策略模式-Strategy 在策略模式中,一个类(策略使用者)可以更改自己的执行策略. 比如以排序算法为例子, 多种排序算法都归属于排序算法, 但是实现的算法细节不同, 使用者可以很轻松地替换策略, ...

  10. [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)

    [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...

随机推荐

  1. HBase和MongoDB的区别

    Mongodb用于存储非结构化数据,尤其擅长存储json格式的数据.存储的量大概在10亿级别,再往上性能就下降了,除非另外分库.Hbase是架构在hdfs上的列式存储,擅长rowkey的快速查询,但模 ...

  2. 安装activemq和java代码实现生产和消费

    Apache Active MQ的官网 http://activemq.apache.org/ 下载地址: 国外的网站,网速不好的时候,真的下不下来 http://activemq.apache.or ...

  3. CentOS下redis-cli安装

    Step1:安装gcc wget等系统lib yum install -y gcc wget Step2:获取redis稳定版并解压 cd /tmp wget http://download.redi ...

  4. npm2 与 npm3的包版本管理

    npm2采用严格的包依赖模式 npm install name@1.2.* ---- 1.2.0 <= version <= 1.2.9 npm install name@1.* ---- ...

  5. Python — 字典dict 和 集合set

    字典dict : dict和set的key都是不可变对象 对于不变对象来说,调用对象自身的任意方法,也不会改变对象自身的内容.相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可 ...

  6. 『OpenCV3』滤波器边缘检测

    一.原理简介 边缘检测原理 - Sobel, Laplace, Canny算子 X方向Sobel算子 -1 -2 -1 0 0 0 1 2 1 Y方向Sobel算子 -1 0 1 -2 0 2 -1 ...

  7. 打造springboot高性能服务器(spring reactor的使用)

    推荐:https://www.cnblogs.com/ivaneye/p/5731432.htmlpom依赖: <dependency> <groupId>org.spring ...

  8. UI 增加文本

    1.直接在节点上增加VALUE NODE. 2.写GET,SET,I,P的相关实现 method GET_ZH12. DATA: lr_current TYPE REF TO if_bol_bo_pr ...

  9. anguar6中 无法在Element上找到属性 (eg 原DOM的offsetTop)

    let aa=this.elementRef.nativeElement.querySelector('.logBox') ;

  10. 数组去重复的时候遇到length变成1 的bug

    arrUnique:function(arr){ //传入空数组的时候有bug,length会变成1 所以修复下 if(arr.length == 0){ return []; } arr.sort( ...