一篇博客读懂设计模式之-----策略模式

设计模式之策略模式

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

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 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);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java并发编程实战————恢复中断

中断是一种协作机制,一个线程不能强制其他线程停止正在执行的操作而去执行其他操作。 什么是中断状态? 线程类有一个描述自身是否被中断了的boolean类型的状态,可以通过调用 .isInterrupted() 方法来查看。官方解释如下: 简单来…

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

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

Spring Boot————单元测试

引言 由于spring boot在启动时通常会先行启动一些内置的组件&#xff0c;比如tomcat。因此&#xff0c;spring boot的测试类一般需要加一些简单的注解。 一、添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-…

一篇读懂--mybatis的缓存

一篇读懂–mybatis的缓存 MyBatis的缓存指的是缓存查询结果&#xff0c;当以后使用相同的sql语句、传入相同的参数进行查询时&#xff0c;可直接从mybatis本地缓存中获取查询结果&#xff0c;而不必查询数据库。 mybatis的缓存包括一级缓存、二级缓存&#xff0c;一级缓存默认…

Spring Boot————BeanCreationNotAllowedException异常分析

引言 在对数据库进行新增记录的JUnit测试时&#xff0c;抛出一个BeanCreationNotAllowedException异常&#xff1a; 异常分析与解决 异常信息太长&#xff0c;图片截不下&#xff0c;粘贴来看&#xff1a; Exception in thread "pool-2-thread-1" org.springframew…

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

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

XML模板解析————Dom4j解析xml案例分析

引言 目前项目中包含大量的xml模板文件&#xff0c;现就xml模板的数据解析、提取、及部分常用方法做简单的应用和总结。 一、XML文件转为Document对象 通过SAXReader对象的read方法&#xff0c;读取Document对象。 SAXReader reader new SAXReader(); Document document …

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

一篇博客读懂设计模式之—工厂模式 工厂模式在我们日常开发的时候经常用到&#xff0c;相信大家都有了一定的了解&#xff0c;工厂模式是一种创建对象的设计模式&#xff0c;它提供一种创建对象的最佳方式。 主要过程是&#xff1a; 定义一个创建对象的接口&#xff0c;让其子…

Jackson快速入门

引言 上一篇博客《XML模板解析————Dom4j解析xml案例分析》简单讲解了关于xml模板的解析&#xff0c;使用到了dom4j&#xff0c;这篇文章其实算是个姊妹篇&#xff0c;都是对于目前工作中的一些任务&#xff0c;如xml、json相互解析所涉及到的知识。 但是相对于xml而言&am…

一篇文章读懂MySQL的各种联合查询

一篇文章读懂MySQL的各种联合查询 联合查询是指将两个或两个以上的表的数据根据一定的条件合并在一起! 联合查询主要有以下几种方式&#xff1a; 全连接&#xff1a;将一张表的数据与另外一张表的数据彼此交叉联合查询出来 举例如下&#xff1a; 先建两张表&#xff1a; CR…

Class.forName()、Class.class、getClass() 区别

问&#xff1a;简单谈谈你对 Java 中 Class.forName()、Class.class、getClass() 三者的理解&#xff1f; Class.class 的形式会使 JVM 将使用类装载器将类装入内存&#xff08;前提是类还没有装入内存&#xff09;&#xff0c;不做类的初始化工作&#xff0c;返回 Class 对象…

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

教你如何一篇博客读懂设计模式之----原型模式 what&#xff1a;是什么 原型模式&#xff1a; 用于创建重复的对象&#xff0c;既不用一个属性一个属性去set和get&#xff0c;又不影响性能&#xff0c;原型模式产生的对象和原有的对象不是同一个实例&#xff0c;他们的地址也…

Java反射————Method根据方法名称字符串调用方法

引言 之前浏览廖雪峰老师的个人博客网站&#xff0c;无意间发现了关于在Java8中获取参数的方法&#xff0c;随手一转《Java 8中获取参数名称》&#xff0c;没想到今天遇到一个功能&#xff0c;非常符合这种反射调用的使用场景。回看了这篇之前转载的文章&#xff0c;然后根据自…

一篇文章看懂@Scheduled定时器/@Async/CompletableFuture

一篇文章看懂Scheduled定时器/Async/CompletableFuture Scheduled注解解析&#xff1a; 1.cron&#xff1a;最重要的一个参数 cron表达式[秒] [分] [小时] [日] [月] [周] [年]&#xff08;[年]可省略&#xff09; 简单了解一下&#xff0c;网上有现成的工具 示例&#xff…

一篇搞懂HTTP协议

本文转自 &#xff1a;flyhero 码上实战《一个HTTP打趴80%面试者》 HTTP协议简介 HTTP&#xff08;超文本传输协议&#xff09;是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成&#xff0c;且是无状态的。&#xff08;暂不介绍HTTP2&#xff09; 协议&…

注册gmail邮件,遇到“此电话号码无法用于进行验证”该怎么办

注册gmail邮件&#xff0c;遇到“此电话号码无法用于进行验证”该怎么办&#xff1f; 跟浏览器语言的设置有关&#xff0c;将语言改为英文即可&#xff0c;亲测有效&#xff01;

Jackson高级操作————节点树

引言 继《Jackson快速入门》基础篇之后的树模型相关操作。 节点树模型 ObjectMapper构建JsonNode节点树&#xff0c;类似于DOM解析器的XML。 Testpublic void testJsonTree() throws JsonProcessingException, IOException {String jsonString "{\"name\":\…

spring源码分析第一天------源码分析知识储备

spring源码分析第一天------源码分析知识储备 Spring源码分析怎么学? 1、环境准备&#xff1b; 2、思路 看&#xff1a;是什么&#xff1f; 能干啥 想&#xff1a;为什么&#xff1f; 实践&#xff1a;怎么做&#xff1f; 调试的时候&#xff0c;完全可以在…

Jackson高级操作————流式API与JsonGenerator、JsonParser

引言 继《Jackson快速入门》之后的高级相关操作。 Jackson提供了一种对于性能要求应用程序操作json更加高效的方式——流式API&#xff0c;这种方式开销小&#xff0c;性能高&#xff0c;因此&#xff0c;如果应用程序或者程序逻辑对于性能有一定要求&#xff0c;可以使用这种…

Mysql高级教程思维导图

Mysql高级教程思维导图 1、思维导图总览&#xff1a; 2、MySQL架构介绍&#xff1a; 2.1、MySQL简介 2.2、MySQL Linux版安装 2.3、MySQL配置文件 2.4、MySQL逻辑架构介绍 2.5、MySQL存储引擎 2.6、MySQL的用户和权限管理 2.7、MySQL一些杂项配置 ’ 3、索引优化分析 3.1、性…