设计模式之策略模式

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的对象

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护!
就好像是你要去西藏旅行,首先你要先到达那里,到达那里有很多种方式,可以做火车,做高铁,坐飞机,虽然在途中我们乘坐的交通工具不一样,但是我们的起点和终点是明确的,是固定的;而我们选择的不同的交通工具就是不同的策略;
像我们平常经常用的比较器comparator,使用的也是策略模式,因为其比较结果就只有三个1,0,-1

  1. 创建Strategy接口:
public interface Strategy {void doOperation(int num1, int num2);
}
  1. 创建实现接口的类:
public class MutiStrategy implements Strategy {@Overridepublic void doOperation(int num1, int num2) {System.out.println("num1 * num2 = "+num1 * num2);}
}
public class AddStrategy implements Strategy {@Overridepublic void doOperation(int num1, int num2) {System.out.println("num1+num2="+num1+num2);}
}
public class SubStrategy implements Strategy {@Overridepublic void doOperation(int num1, int num2) {System.out.println("num1-num2="+(num1-num2));}
}
  1. 创建Context类(重点)
public class Context {private Strategy strategy;public Context(Strategy strategy){this.strategy = strategy;}public void exeStrategy(int num1, int num2){strategy.doOperation(num1,num2);}
}
  1. 编写测试类:
public class StrategyMain {public static void main(String[] args) {Context context = new Context(new AddStrategy());context.exeStrategy(1,2);Context context1 = new Context(new SubStrategy());context1.exeStrategy(2,1);Context context2 = new Context(new MutiStrategy());context2.exeStrategy(2,4);}
}

一篇博客读懂设计模式之-----策略模式相关推荐

  1. 教你如何一篇博客读懂设计模式之—--原型模式

    教你如何一篇博客读懂设计模式之----原型模式 what:是什么 原型模式: 用于创建重复的对象,既不用一个属性一个属性去set和get,又不影响性能,原型模式产生的对象和原有的对象不是同一个实例,他 ...

  2. 教你如何一篇博客读懂设计模式之—--工厂模式

    一篇博客读懂设计模式之-工厂模式 工厂模式在我们日常开发的时候经常用到,相信大家都有了一定的了解,工厂模式是一种创建对象的设计模式,它提供一种创建对象的最佳方式. 主要过程是: 定义一个创建对象的接口 ...

  3. 一篇博客读懂设计模式之---委派模式

    一篇博客读懂设计模式之-委派模式 委派模式可能大家听起来不太熟悉,但是在代码开发的时候却很好用,下面从几个方面来介绍一下 what:是什么? 委派模式:顾名思义,委托其他对象或者实例来帮我们完成任务, ...

  4. 一篇博客读懂设计模式之---模板方法模式

    设计模式之模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 简而言之就是:父类定义了骨架(调用哪些方法及其 ...

  5. 一篇博客读懂设计模式之---工厂模式

    设计模式之-工厂模式 工厂模式: 创建过程: 创建Shape接口 public interface Shape {void draw(); } 创建实现类: public class Circle i ...

  6. 一篇博客读懂设计模式之---动态代理与反射

    一篇博客读懂设计模式之---动态代理与反射 先来讲一下反射: 1 关于反射 反射最大的作用之一就在于我们可以不用在编译时就知道某个对象的类型,而在运行时通过提供完整的"包名+类名.class ...

  7. 一篇博客读懂设计模式之---单例模式

    一篇博客读懂设计模式之---单例模式 一.  单例模式 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处 ...

  8. [入门篇]用史上最生动的方式让你一篇博客搞懂Linux进程地址空间,包看包懂!

    目录 0.前言 1.初始程序的地址空间划分 1.1程序地址空间图解 1.2程序地址空间区域划分验证 1.3 程序地址空间小补充 1.4 引入进程地址空间 *2. 两个生动的例子理解进程地址空间 2.1 ...

  9. Linux - 一篇带你读懂 Curl Proxy 代理模式

    curl 是一个很有名的处理网络请求的 类Unix 工具.出于某种原因,我们进行网络请求,需要设置代理.本文讲全面介绍如何为 curl 设置代理 设置代理参数 基本用法 -x, --proxy [pr ...

最新文章

  1. extra加ing_英语词汇学各个章节的内容
  2. SQL Server数据库大型应用解决方案总结(转载)
  3. SOCKET编程-时间服务器和客户端的实现
  4. 技嘉主板开机代码15_技嘉TRX40 AORUS MASTER开箱评测:16+3相直出供电太可怕
  5. python为什么没有指针_Python中有指针吗?
  6. 《Android开发精要》读书笔记——Android的系统架构
  7. [转载] numpy入门4:线性代数
  8. MYSQL 最大连接数设置
  9. tomcat配置项目的接种方式
  10. 数据结构 KMP 算法实现
  11. 360导航源码php,仿360网址导航源码v3.0
  12. 如何对酒店的固定资产进行日常管理?
  13. 最全面的web程序设计知识点总结
  14. 已解决ImportError: Pandas requires version ‘2.0.1‘ or newer of ‘xlrd‘ (version ‘1.2.0‘ currently instal
  15. 南卡和漫步者蓝牙耳机哪个好?国产蓝牙耳机南卡和漫步者360度对比评测
  16. ROS下安装和运行SVO数据包和实时测验的过程记录
  17. aho-corasick php,更快的Aho-Corasick PHP实现
  18. 区块链学习:区块链分类
  19. SSI(串行同步接口)协议如何工作
  20. 数学期望、信息量、信息熵、相对熵、交叉熵

热门文章

  1. 预处理阶乘和阶乘逆元_计算数字的阶乘| 8086微处理器
  2. 再见 Spring Task,这个定时任务框架真香!
  3. 万字详解|手撕 9大排序算法!
  4. C# Winform 窗体美化(七、Win7 Aero 毛玻璃效果)
  5. vmware安装渗透系统 Linux Kail最新版
  6. reactor p java_Java反应式框架Reactor中的Mono和Flux
  7. devstack mysql_DevStack部署OpenStack开发环境 - 问题总结
  8. mysql 插入数据 自增长_如何在MYSQL插数据 ID自增
  9. hive币涨幅空间大吗_自动消防水炮只能安装在大空间场所吗
  10. 计算机原理寻址方式ppt,计算机原理_3 寻址方式和指令系统.ppt