首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式学习笔记(十五)命令模式Spring JdbcTemplate 实现

下面就来看看命令模式的结构和实现: 1.1 命令模式的结构 将调用者和实现者进行分离,其结构如下所示: Command:抽象命令角色,声明执行命令的接口 Command1、Command2:具体命令角色...1.2 命令模式实现 根据上面的结构图,可以实现如下代码: /** * @description: 抽象命令类 * @author: wjw * @date: 2022/4/5 */ public...二、命令模式的应用场景 2.1 Spring 框架的 JdbcTemplate 本文选取的Spring版本是5.3.1,来看看JdbcTemplate类的query()方法: 我们看到,上面的query...这里QueryStatementCallback就相当于命令模式的具体命令对象,而StatementCallback则是抽象命令对象。...三、命令模式实战 模拟在餐厅中点餐交给初始烹饪的场景,该场景中点餐人员只需要把需要点的各种菜系交给服务员,服务员再把各项菜品交给厨师进行烹饪。

20920
您找到你想要的搜索结果了吗?
是的
没有找到

从源码到实战之Spring的JdbcTemplate及策略模式自定义JdbcTemplate实现

存在多数据源时,可以将不同的 DataSource 注册到 各自的 JdbcTemplate Spring 实现不同对 JdbcTemplate 的 Bean 进行管理,从而实现多数据源操作数据库。... Spring JDBC 框架,绑定 SQL 参数的另一种选择是使用具名参数(named parameter)。 那么什么是具名参数? 具名参数:SQL 按名称(以冒号开头)而不是按位置进行指定。...(使用策略模式): 获取 JavaBean 对象 实现代码如下: public class BeanHandler implements ResultSetHandler { private...小结 本文从 JdbcTemplate 实现持久层入门到自定义实现,了解并掌握 JdbcTemplate 的基本使用及其实现原理;从自定义 JdbcTemplate 实现可以了解到策略模式的用法,策略模式是面向接口编程思想的具体体现...,通常情况下,作为设计者会暴露出来一个接口,同时可以提供一些接口实现,也可以不提供,而让使用者根据具体情况去编写具体实现代码。

2K30

使用IPVS代理模式Kubernetes实现负载均衡和服务发现

可以使用以下命令节点上安装IPVS:sudo apt-get install ipvsadm -y安装完成后,需要配置kube-proxy,以便使用IPVS代理模式。...kube-proxy的配置文件,需要添加以下参数:proxy-mode: ipvsipvs: scheduler: rr这里我们指定使用IPVS代理模式,并使用轮询算法(RR)作为负载均衡算法。...完成配置后,重启kube-proxy以使更改生效:sudo systemctl restart kube-proxy现在,我们可以创建一个测试服务来验证负载均衡和服务发现是否正常工作。...PORT(S) AGEnginx ClusterIP 10.103.131.84 80/TCP 1m现在,我们可以使用curl命令测试服务是否正常工作...:curl http://10.103.131.84如果一切正常,应该可以看到Nginx的默认欢迎页面。

56551

linux 我安装了一个命令行,是否所有用户都可以使用这个命令,比如 docker?

---- 问: linux系统里,普通用户目录是 /home 下,root用户目录在 /root,因此全部用户共享目录的。 那如果我们要装一个东西的话,是不是只用装一遍?...(比如说ohmyzsh之类的) 我之前自己服务器上,每次都需要安装两遍,一次只有当前那个用户生效,这是为什么呢?...---- 答: 不一定,当我们说我们 linux 装了一个东西,指的是:「我们装了一个命令,可全局执行」。此时是将该命令放在了全局执行目录(或者将该命令目录放在了 $PATH)。...哦对,PATH 该路径列表可自定义,而每一个用户都可以有独立的 PATH 环境变量。...所以,要看一个命令是所有用户共享还是仅对当前用户有效,具体要看该命令是怎么装的,可以看看 which command 进一步排查。

7.3K60

如果策略模式的代码有段位,你的是白银?黄金?还是王者?

经典的策略模式 经典的策略模式+简单工厂 基于枚举策略模式 Spring框架+策略模式 小结 概述 软件开发,我们经常会遇到一些场景,其中业务流程大致相同,但具体的操作步骤或算法却可能因为某些条件的不同而有所变化...策略模式,定义了一个抽象策略类,然后创建具体策略类来实现不同的算法,并将这些算法封装起来。 这些具体策略类通常继承自抽象策略类或实现相同的接口,以确保它们的行为是一致的,这样它们就可以互换使用。...使用策略模式的代码实现符合开闭原则,扩展性和维护性会更好。 策略接口是否可以是抽象类? 可以的。...Java枚举类型是一种特殊的类,枚举的本质是创建了一些静态类的集合,用于表示固定数量的常量。某些情况下,如果策略的数量有限且相对固定,我们可以使用枚举来简化策略的管理。...那么Spring下如何优雅的使用策略模式呢? Spring框架+策略模式 Spring框架实现策略模式通常涉及到使用Spring的依赖注入功能来动态地选择并注入不同的策略实现

6100

常见重构技巧 - 去除多余的if else

方法特别多 出现if/else和switch/case的场景 重构思路 方式一 - 工厂类 方式二 - 枚举 方法三 - 命令模式 方法四 - 规则引擎 方法五 - 策略模式 一些反思 出现if/else...请参考:Java 8 - 函数编程(lambda表达式) 方式二 - 枚举 枚举适合类型固定,可枚举的情况,比如这的操作符; 同时枚举可以提供方法实现的,这就是我们可以通过枚举进行重构的原因。...策略模式比命令模式更为常用,而且实际业务逻辑开发需要注入一定的(比如通过Spring的@Autowired来注入bean),这时通过策略模式可以巧妙的重构 策略模式(strategy pattern...Spring需要注入资源重构? 如果是实现业务逻辑需要注入框架中资源呢?比如通过Spring的@Autowired来注入bean。...实际开发,切记最怕的是刚学会成语,就什么地方都想用成语; 很多时候不是考虑是否是最佳实现,而是折中(通常是业务和代价的折中,开发和维护的折中…),适当的时候做适当的重构。

37230

设计模式--策略模式的思考

---- 策略模式是一种简单的设计模式,但是其在业务开发是一种非常有用的设计模式.举个例子,当你的业务需要针对不同的场景(可以简单理解为枚举类),执行不同的策略时那么使用策略模式可以帮助你更好的写出低耦合与高可扩展的代码...仍旧无法避免if/else逻辑,针对大多数场景下都是根据条件分支判断来选择具体的策略,那么客户端耦合具体策略的情况下这个是没法避免的 策略枚举模式 Java的枚举可以实现接口,而且枚举常量天然的可以与具体行为绑定...基于枚举策略模式也有一些问题: 枚举类无法外部实例化,因此无法被IOC管理,往往策略实现都是复杂的依赖众多其他服务,那么这种时候枚举类就无从下手 IOC配合下的策略模式 实践,客户端往往不关心具体的实现类是如何实现的...当新增策略时只需要新增对应的枚举类,以及具体的实现策略,Context添加一个新的枚举实现类关系.客户端代码基本不要任何改变....补充: 更加优雅的做法是利用Spring的事件机制,Spring初始化完毕后再构建整个策略Map,可以参考我观察者模式中所使用到的方法.

72550

设计模式之单例模式

很多时候系统对类的需求就只是一个全局对象,有些资源比较重,加载创建耗时,适用于单例模式;有些资源代表的是纯函数的操作,虽然可以使用new 来创建新对象,使用单例模式可以减少对象创建消耗,在手机等资源少的地方推荐使用...(jdk1.5 之后才可以使用) 懒加载虽然保证了资源加载就一定是被使用的,但是如果资源加载时间较长,所以使用方都必须等待资源加载完成,譬如数据库的加载、连接建立,因此要看自己的使用场景来判断是否需要使用懒加载模式...枚举 枚举天生自带的单一属性非常符合单例模式使用枚举的解决方案也非常优雅,而且还适合与策略、命令等模式配合。...虽然模式叫单例模式,但有时我们可能需要 n 个实例,数量是需要控制的,增加了实现难度,枚举只需要加一个枚举可以策略模式相配合,实现更优雅。...public void doSomething() { } } 与策略、命令等模式结合 如果我们每个实例需要有不同的实现,那么可以枚举实例覆盖相关方法, 枚举也支持抽象方法。

33240

为什么我不再推荐枚举策略模式

调用类的实现也待商榷,新增一个策略类还要修改榜单实例(可以用抽象工厂解决,但是复杂度又上升了)。...return rank.sort(dataService.getSource()); } } 可以看到,如果策略简单的话,基于枚举策略模式优雅许多,调用方也做到了0修改,但正确地使用枚举策略模式需要额外考虑以下几点...而枚举策略如果过多或者过程复杂,维护是比较困难的,可维护性受限 ◆四、基于工厂的策略模式 为了解决良好的扩展性和可维护性,我更推荐以下利用spring自带beanFactory的优势,实现一个基于工厂的策略模式...()); } } 若读者使用的不是Spring,也可以找找对应框架的工厂模式实现,或者自己实现一个抽象工厂。...工厂策略模式会比枚举策略模式啰嗦,但也更加灵活、易扩展性和易维护。故简单策略推荐枚举策略模式,复杂策略才推荐工厂策略模式

1.5K30

巧用 Spring 自动注入实现策略模式升级版

一、前言 1.1 背景 工作过程,有时候需要根据不同的枚举(常量)执行不同的逻辑。 比如不同的用户类型,使用不同的优惠政策;不同的配置变化,走不同的处理逻辑等。...(中性的描述) (1)同一个业务枚举可能会有多种策略,如果每种策略都以业务类型作为 name 会出现很多重名不同类型的 Bean,是否会造成困惑?...(也可以通过实现 InitializingBean 接口, afterPropertiesSet 方法编写上述 init 部分逻辑。...3.2.3 其他 (待补充) 可以构造子类型时自动将自身添加都某个容器,这样使用时直接从容器拿到当前对象即可。 可能还有其他不错的方式,欢迎补充。...四、总结 本文简单介绍了通过 Spring 自动注入实现策略模式的方法,还提供了Spring 环境下的实现方式。 避免新增一个新的 bean 时,多一处修改(硬编码 or 硬配置)。

1.6K20

2019年Java工程师成神之路正式版

Java 8 stream 相关用法、apache 集合处理工具类的使用、不同版本的 JDK HashMap 的实现的区别以及原因 Collection 和 Collections 区别 Arrays.asList...→ 枚举 枚举的用法、枚举实现枚举与单例、Enum 类 Java 枚举如何比较 switch 对枚举的支持 枚举的序列化如何实现 枚举的线程安全性问题 → IO 字符流、字节流、输入流、输出流、...行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式策略模式、职责链模式(责任链模式)、访问者模式。...→ 会使用常用设计模式 单例的七种写法:懒汉——线程不安全、懒汉——线程安全、饿汉、饿汉——变种、静态内部类、枚举、双重校验锁 工厂模式、适配器模式策略模式、模板方法模式、观察者模式、外观模式、代理模式等必会...如何判断是否存在内存泄露 使用 Arthas 快速排查 Spring Boot 应用404/401问题 使用 Arthas 排查线上应用日志打满问题 利用 Arthas 排查 Spring Boot

86310

策略模式了解一下!

策略模式 2.1 策略模式实现的Service @Service public class CancelOrderStrategyService { @Autowired private...key,对应的类作为value,保存在策略Map 初始化StrategyContext,并注册到spring容器,同时将策略Map传入其中 我们使用枚举作为Map的key,相信大家很少有人这样操作过...自定义枚举类 Enum 是否可以作为 HashMap 的key:https://blog.csdn.net/dalinsi/article/details/53064843 Java Map 中使用复杂数据类型作为...总结 策略模式极大的减少if else等模板代码,提升代码可读性的同时,也大大增加代码的灵活性,添加新的策略可以满足业务需求....本人在我司业务策略模式的应用得到了很好的验证,从此再也不用担心产品改需求. 用策略模式一时爽,一直用一直爽?! 4.

83921

重学 Java 设计模式:实战代理模式「模拟mybatis-spring定义DAO接口,使用代理类方式操作数据库原理实现场景」

场景模拟;实现mybatis-spring中代理类生成部分 「本案例我们模拟实现mybatis-spring中代理类生成部分」 对于Mybatis的使用只需要定义接口不需要写实现类就可以完成增删改查操作...五、代理类模式实现过程 接下来会使用代理类模式来模拟实现一个Mybatis对类的代理过程,也就是只需要定义接口,就可以关联到方法注解的sql语句完成对数据库的操作。...代理模式中间件模型结构 此模型涉及的类并不多,但都是抽离出来的核心处理类。主要的事情就是对类的代理和注册到spring。 上图中最上面是关于中间件的实现部分,下面对应的是功能的使用。 2....bean配置,mybatis的使用中一般会配置扫描的dao层包,这样就可以减少这部分的配置。...那么这个过程你可以看到我们是没有对接口先一个实现类的,而是使用代理的方式给接口生成一个实现类,并交给spring管理。

1.1K10

防御性编程失败,我开始优化我写的多重 if-else 代码

1 : 2; 使用枚举 某一些场景我们也可以使用枚举来优化多重 if-else 代码,使我们的代码更加简洁、具备更多的可读性和可维护性。...default: // 处理其他情况 break; } 策略模式 + 简单工厂模式 前面我们介绍一些常规、比较简单的优化方法,但是一些更加复杂的场景(比如多渠道对接、多方案实现等...)我们可以结合一些场景的设计模式实现让我们的代码更加优雅和可维护性,比如策略模式 + 简单工厂模式。...} else { // 构建渠道C // 通知 } } // 上面的代码不仅维护起来麻烦同时可读性也比较差,我们可以使用策略模式...Spring IOC 能力的自动实现策略类的导入,然后使用 getBean() 方法获取对应的策略类实例,可以根据我们的实际情况灵活选择。

20420

策略模式

策略模式作为一种软件设计模式,指对象有某个行为,但是不同的场景,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“美国交个人所得税”和“中国交个人所得税”就有不同的算税方法。...--维基百科 项目中时常会用到策略模式的场景,比如业务需要支付,但是有多个支付渠道,那如何对上层业务暴露"统一口径"(接口)呢,下面结合代码说明, 首先定义支付接口: public interface...return 2; }} 不同的实现已经好了,需要在上层业务传入不同的支付类型,调用具体的实现,结合在Spring项目中使用方式: @Componentpublic class...PayTypeUtil的getPayService方法传入不同的支付类型便可得到具体的实现,上面借助了Spring的 InitializingBean接口实现bean初始化时,加载 Pay所有的实现类...return 2; }} 以上简单说明策略模式的用法,根据实际的业务场景结合使用.

41920

项目代码 ifelse 过多,引起程序猿口吐莲花

还有其他很多框架类库,例如 Spring、Apache Commons 都提供了工具类,用于实现这种通用的功能,这样大家就不必自行编写 if...else 了。...例如: Assert.hasText(param.getType(), "参数类型不能为空"); 关于Spring 的 Assert 类,可以查阅:https://docs.spring.io/spring-framework...程序执行时,通过对比入参与注解定义的条件是否匹配,再决定是否调用此方法。...注解驱动,很多框架中都能看到这种模式使用,比如我们经常用的 Spring,具体实例,大家可以参考:https://www.cnblogs.com/houzheng/p/10911462.html 策略模式...map对象来保存策略,或者反射调用,或者交给spring获取bean等方式很多) Strategy strategy = map.get(param); strategy.run(); 枚举 枚举定义方法

65010

自定义Annotation & Enum 原

>@Inherited                说明子类可以继承父类的该注解(使用较少)    1....// 默认的保留策略,注解会在class字节码文件存在,但运行时无法获得,             @Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件存在...          若枚举只有一个成员(对象),则可以作为一种单例模式实现方式            1.如何自定义枚举类 (    JDK1.5之前    ) package com.step.j2enum...seasonDesc; //2.声明为final属性,构造器初始化。...enum关键字定义枚举类          >常用的方法:values(),valueOf(String name)          >实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同

44620

Java 工程师成神之路 | 2019正式版

Java 8 stream 相关用法、apache 集合处理工具类的使用、不同版本的 JDK HashMap 的实现的区别以及原因 Collection 和 Collections 区别 Arrays.asList...→ 枚举 枚举的用法、枚举实现枚举与单例、Enum 类 Java 枚举如何比较 switch 对枚举的支持 枚举的序列化如何实现 枚举的线程安全性问题 → IO 字符流、字节流、输入流、输出流、...行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式策略模式、职责链模式(责任链模式)、访问者模式。...→ 会使用常用设计模式 单例的七种写法:懒汉——线程不安全、懒汉——线程安全、饿汉、饿汉——变种、静态内部类、枚举、双重校验锁 工厂模式、适配器模式策略模式、模板方法模式、观察者模式、外观模式、代理模式等必会...如何判断是否存在内存泄露 使用 Arthas 快速排查 Spring Boot 应用404/401问题 使用 Arthas 排查线上应用日志打满问题 利用 Arthas 排查 Spring Boot

1.4K50
领券