原 荐 设计模式 之 策略模式

栏目: 后端 · 发布时间: 6年前

设计模式 之 策略模式

  GMarshal 发布于 今天 15:13

字数 713

阅读 7

收藏 0

开发十年,就只剩下这套 Java 开发体系了 >>> 原 荐 设计模式 之 策略模式

设计模式 之 策略模式

定义

提供几个算法策略,选择其中一个策略去执行。

优点

  • 由于将算法封装成单独的策略,策略可以灵活切换。
  • 扩展性好,符合开闭原则。

缺点

  • 策略多,类也会变多
  • 策略类需要对外暴露

代码

场景

常见的加、减、乘、除,客户端选择其中一个算法进行计算。

代码

IOperation

/**
 * 操作接口
 * @author GaoYuan
 * @date 2018/11/11 下午2:45
 */
public interface IOperation {
    /** 执行计算 */
    int operation(int a,int b);

}

加、减、乘、除具体的算法实现类

/**
 * 加法
 */
public class AddOperation implements IOperation{

    @Override
    public int operation(int a, int b) {
        return a + b;
    }
}
/**
 * 减法
 */
public class SubOperation implements IOperation{

    @Override
    public int operation(int a, int b) {
        return a - b;
    }
}
/**
 * 乘法
 */
public class MulOperation implements IOperation{

    @Override
    public int operation(int a, int b) {
        return a * b;
    }

}
/**
 * 除法
 */
public class DivOperation implements IOperation{

    @Override
    public int operation(int a, int b){
        if(b == 0){
            return 0;
        }
        return a / b;
    }
    
}

Context

/**
 * 使用者
 * @author GaoYuan
 * @date 2018/11/11 下午2:51
 */
public class Context {

    IOperation iOperation;

    public Context(IOperation iOperation) {
        this.iOperation = iOperation;
    }

    public int execute(int a, int b){
        return iOperation.operation(a, b);
    }
}

测试

public static void main(String[] args){
    // 加
    Context context = new Context(new AddOperation());
    System.out.println(context.execute(6,2));
    // 减
    context = new Context(new SubOperation());
    System.out.println(context.execute(6,2));
    // 乘
    context = new Context(new MulOperation());
    System.out.println(context.execute(6,2));
    // 除
    context = new Context(new DivOperation());
    System.out.println(context.execute(6,2));
}

结果输出:

策略模式 与 状态模式 区别

相同点

  • 类的结构都差不多

不同点

  • 状态模式 侧重 状态之间的切换,在状态A执行完毕后自己控制状态指向状态B,根据状态改变行为。
  • 策略模式 侧重 调用者选择其中一种策略进行执行。根据不同的条件选择不同的策略。

策略模式 与 简单工厂模式 区别

相同点

  • 最终结果是一致的,都是根据某个情景,执行最终的算法

不同点

概念上,或者说最本质的区别

  • 简单工厂模式属于创建型模式,调用者,根据条件,可以获取直接创建好的目标对象,然后调用该对象对应的方法即可。
  • 策略模式属于行为型模式,调用者需要先创建Context对象,然后自行选择算法,以便具体调用。

当然,在一定程度上,两者也可以相结合。

码云

https://gitee.com/gmarshal/foruo-learn-java/tree/master/src/main/java/com/foruo/learn/designmode/strategy

博客

https://my.oschina.net/gmarshal/blog/2876104

欢迎关注我的个人微信订阅号:(据说这个头像程序猿专用)

原 荐 设计模式 之 策略模式

原 荐 设计模式 之 策略模式

© 著作权归作者所有

共有人打赏支持

上一篇: 浅谈前后端分离项目结构的探索

下一篇: 设计模式 之 状态模式

原 荐 设计模式 之 策略模式

GMarshal

粉丝 15

博文 53

码字总数 42244

作品 0

南京

程序员

提问

相关文章 最新文章

《PHP设计模式大全》系列分享专栏

《PHP设计模式大全》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201739.html 文章 php 设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页...

kaixin_code

11/06

0

0

编程中的那些套路——关于策略模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 今天讲讲策略模式,策略模式 和工厂模式十分相像(或者说在代码逻辑层面,他们是一样的)。 但策略模式与...

gzchen

08/27

0

0

javascript 设计模式之工厂(Factory)模式

工厂模式介绍 工厂模式是一个创建型的模式,主要就是创建对象。其中工厂模式又分为简单工厂模式和抽象工厂模式。简单工厂模式是通过工厂方法确定创建 对应类型的对象。抽象工厂模式是通过子类...

hlxiong

2014/04/14

0

0

JavaScript设计模式入坑

JavaScript设计模式入坑 介绍 设计模式编写易于维护的代码。 设计模式的开创者是一位土木工程师。Σ( ° △ °|||)︴,写代码就是盖房子。 模式 模式一种可以复用的解决方案。解决软件设计中...

小小小8021

10/18

0

0

【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying

06/24

0

0

原 荐 设计模式 之 策略模式

没有更多内容

加载失败,请刷新页面

加载更多
Linux虚拟机安装VmwareTool

1.点击虚拟机: 2.点击安装Vmware-Tools,出现如下界面,将圈起来的拖动到桌面 3.接着打开终端,执行解压缩命令 tar -xzv -f VMwareTools-10.2.5-8068393.tar.gz 这个后面的VMwareTools-10.2....

陈刚生

31分钟前

1

0

Java学习笔记(1) --JSE 、JEE、 JME三者的区别

java SE : java standard edition , JSE。它允许允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的java应用程序。 java SE包含了java Web 服务开发的类,并为java platform ,e...

hellation_

34分钟前

3

0

kafka 环境配置

https://www.cnblogs.com/fly-piglet/p/7762556.html

steel7c4

37分钟前

1

0

关于人工智能的思考

像人类一样可以思考,可以创造的人工智能会出现吗? 个人认为:会出现。但是出现的时间,取决了于硬件架构,和运算架构实现的时候。原因在于,人类智能可以出现,机器智能为什么不可以呢,不...

janl

39分钟前

1

0

破界!Omi生态omi-mp发布,用小程序开发生成Web

omi-mp 是什么 Omi 框架是微信支付线研发部和 AlloyTeam 开源的通用 Web 组件化框架,基于 Web Components,用来开发 PC、手机浏览器或者微信、手Q webview 的 Web 页面。自今年5月开源以来,...

腾讯开源

43分钟前

1

0

原 荐 设计模式 之 策略模式

没有更多内容

加载失败,请刷新页面

加载更多

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与分析

算法设计与分析

张德富 / 2009-8 / 36.00元

《算法设计与分析》主要取材于算法设计与分析领域的经典内容,并介绍了算法设计的发展趋势。内容主要包括非常经典的算法设计技术,例如递归与分治、动态规划、贪心、回溯、分支限界、图算法,也包括了一些高级的算法设计主题,例如网络流和匹配、启发式搜索、线性规划、数论以及计算几何。在算法分析方面,介绍了概率分析以及最新的分摊分析和实验分析方法。在算法的理论方面,介绍了问题的下界、算法的正确性证明以及NP完全理论......一起来看看 《算法设计与分析》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具