当前位置: 首页 > article >正文

java中常用的5种设计模式

背景

虽然Java 的设计模式有20多种,但是我们基本上都是用spring体系开发的,所以只推荐一下这5种设计模式,基本上能解决大部分问题。

常用的5种设计模式

一、单例模式

定义: 这个类的实例在这个项目中只能有一个。

代码:

// 全局本地缓存
public class Cache {private static final Cache<CacheKey, Object> cache = new Cache<>();	public static Cache<CacheKey, Object> getInstance(){return cache;}
}
// 全局的线程池,提供给多个场景复用
public class ExecutorServiceManager {private final static LinkedBlockingQueue<Runnable> WORK_QUEUE = new LinkedBlockingQueue<>(1000);private final static RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.CallerRunsPolicy();private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(20, 100, 0, TimeUnit.SECONDS, WORK_QUEUE, HANDLER);public static ThreadPoolExecutor getThreadPoolInstance(){return executorService;}// 关闭线程池public static void shutdown() {if (executorService != null && !executorService.isShutdown()) {executorService.shutdown();}}// 强制关闭线程池public static void shutdownNow() {if (executorService != null && !executorService.isShutdown()) {executorService.shutdownNow();}}
}

二、工厂模式

定义:推荐两种,分别是简单工厂模式、抽象工厂模式。

代码:

// 简单工厂模式
@Component
public class OrderFactory {@Autowiredprivate List<Order> orderList;public Order createOrderBean(BizTypeEnum type) throws Exception {return orderList.stream().filter(x -> x.symbol() == type).findFirst().orElseThrow(() -> new Exception("参数有误"));}
}// 抽象工厂模式
public abstract class AbstractFactory<E extends Enum<E>, S extends BeanInterface<E>> {protected List<S> ss;public AbstractFactory(List<S> ss) {this.ss = ss;}/*** 创建bean** @param en 枚举* @return 符合条件的bean*/public Optional<S> createBean(E en) {return ss.stream().filter(x -> x.symbol().equals(en)).findFirst();}}public interface BeanInterface<E extends Enum<E>> {/*** 具体实例的标识** @return*/E symbol();}

三、适配器模式

这个模式,简单说就是想使用别的类的功能。细分为三种,类的适配器模式、对象的适配器模式、接口的适配器模式,但是类的适配器模式不推荐(基于继承),所以下面就介绍下,对象的适配器模式和接口的适配器模式。
对象的适配器模式:就是通过组合的方式拥有某个对象的能力;
接口的适配器模式:就是抽象的形式,空实现,给子类足够的选择。

对象的适配器模式代码:

@Data
public final class RecoveryUserModelAdapter  {private UserModel userModel;public List<String> getCompany() {return userModel.getCompany();}public String getAccount(){return userModel.getAccount();}public String getName(){return userModel.getName();}public RecoveryUserModelAdapter(UserModel userModel) {this.userModel = userModel;}/*** 角色key*/private Set<String> roleKeys;public boolean hasSuperRole() {return roleKeys != null&& (roleKeys.contains(RecoveryConstants.SUPER_ROLE)|| roleKeys.contains(RecoveryConstants.MANAGE_ROLE)|| roleKeys.contains(RecoveryConstants.ADMIN));}public boolean hasManageRole() {return roleKeys != null&& (roleKeys.contains(RecoveryConstants.MANAGE_ROLE)|| roleKeys.contains(RecoveryConstants.ADMIN));}}

接口的适配器模式代码:

public interface Order {public Object create(Object params);public void check(Object params);public BizTypeEnum symbol();
}public abstract class AbstractOrder implements Order {@Overridepublic Object create(Object params) {return null;}@Overridepublic void check(Object params) {}
}

四、模版方法模式

定义:一个方法定义好执行步骤,每个步骤子类可以按照自己的需要实现对应的方法。

代码:

public abstract class AbstractOrder implements Order {@Overridepublic Object create(Object params) {// 1.校验参数checkParam(params);// 2.价格确认priceConfirm(params);// 3.构建数据buildOrderData(params);// 4.下单uniOrder(params);// 5.入库saveData(params);return null;}protected abstract void saveData(Object params);protected abstract void uniOrder(Object params);protected abstract void buildOrderData(Object params);protected abstract void priceConfirm(Object params);protected abstract void checkParam(Object params);protected void check(Object params) {}
}

五、策略模式

定义:一个方法多种实现,根据需要选择对应的实现,可以配合上面的几种模式使用

代码:

@Component
public class AppOrderStrategy implements Order{@Overridepublic Object create(Object params) {return null;}@Overridepublic BizTypeEnum symbol() {return BizTypeEnum.APP;}
}
@Component
public class MiniAppOrderStrategy implements Order{@Overridepublic Object create(Object params) {return null;}@Overridepublic BizTypeEnum symbol() {return BizTypeEnum.MINI_APP;}
}
@Component
public class H5OrderStrategy implements Order{@Overridepublic Object create(Object params) {return null;}@Overridepublic BizTypeEnum symbol() {return BizTypeEnum.H5;}
}
http://www.lryc.cn/news/2420203.html

相关文章:

  • zTree学习笔记1---zTree从零搭建(新手基础教程)
  • Android Gson使用详解
  • Oracle对时间date,to_date(),to_char()的理解
  • IAR的基本使用教程
  • MySQL下载及安装最新版教程
  • 深入了解memcached缓存数据库
  • open-webui入门
  • RIL 机制---开篇
  • 一篇彻底学懂补码
  • Oracle 中 decode
  • 深层神经网络(DNN)的一些基本概念
  • 电子设计常识——阻抗
  • 【Go】并发编程之runtime包及其常用方法
  • UML建模工具安装详细教程(StarUML 5.0.2)
  • 个人MSSQL总结及收集
  • idea打包生成generated文件,强迫症就很烦
  • MySQL索引基础到原理讲解,一篇文章就够了!
  • solr快速上手:solr简介、安装并设置开机自启(一)
  • 22款超好用的CLI工具
  • #MATLAB绘图--------气泡图绘制#
  • NVL函数,NVL2函数的使用,查询日期天数
  • 有趣的HTML实例(二) 404页面
  • Jetty9容器安装与使用
  • 小白必看的Ubuntu20.04安装教程(图文讲解)
  • CentOS安装桌面环境GNOME
  • 图形图像基础 之 jpeg介绍
  • TRUNC() 函数的使用
  • 如何查看电脑配置信息
  • reactor模式学习
  • springboot配置Hikari连接池