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

Java面试--设计模式

设计模式

目录

  • 设计模式
    • 1.单例模式?
    • 2.代理模式?
    • 3.策略模式?
    • 4.工厂模式?

1.单例模式?

单例模式是Java的一种设计思想,用此模式下,某个对象在jvm只允许有一个实例,防止这个对象多次引用创建多个实例消耗内存。

  • 饿汉模式:在类加载的时候就创建,用static修饰直接new出对象。在多线程下是安全的。
  • 懒汉模式:在使用的时候再创建。多线程下不安全,可用sychronized修饰代码块和双重检查机制(DCL)来处理,这里对对象变量加了一个volatile关键字来修饰,保证可见性,因为jvm编译器的优化,对对象重排序,线程访问时给内存地址可能是没有实例化的,这样获取信息都是为null

在这里插入图片描述

2.代理模式?

代理:一般请求服务器,会直接执行核心代码返回结果即可。但我们在返回结果可以附加些功能,比如日志打印,保存等,这些都可以通过代理模式实现。
动态代理有JDK代理和cglib代理。

  • JDK代理:这种代理是实现接口,在实现目标接口时,加入附加功能,通过代理类调用目标方法 实现步骤①需要有目标类且实现接口 ②创建一个代理类实现InvoationHandler接口调用invoke方法实现附加功能。③在具体调用方法前调用proxy的newProxyInstance(类加载器,目标对象接口,处理器(也是自定义的代理类))方法创建代理对象,通过代理对象调用目标方法。
  • cglib代理:使用底层的字节码技术,通过字节码技术为一个类创建子类并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势加入附加逻辑。实现步骤:①需要有目标接口 ②创建代理类实现MethodInterceptor接口,重写intercept接口实现附加功能 ③先创建空字节码对象new Enhancer(),设置目标类字节码参数;再创建回调对象;利用字节码创建得到代理对象;最后调用目标类方法

大家可参考这篇:原文

3.策略模式?

  • 策略模式:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式让算法独立于使用它的客户而变化。(如刷公交卡不同人使用类型卡)
  • ThreadPoolExecutor()中有个参数是需要输入拒绝策略参数,输入不同的策略方式实现不同的行为。

大家可参考这篇:原文

4.工厂模式?

工厂模式主要就是创建对象,且不让对象的逻辑暴露给客户端。下面一篇解释比较详细:
转载:原文

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【HW工具】Nacos漏洞综合利用工具v7.0,零基础入门到精通,收藏这一篇就够了
  • 数学分析原理答案——第一章 习题16
  • Tensorflow—第四讲网络八股扩展
  • [C++]: std::move
  • Vue引入使用iconfont字体图标
  • Java 基础(从编写到运行)详细说明
  • springboot使用WebSocket
  • LeetCode257 二叉树的所有路径
  • 高可用集群KEEPALIVED
  • opencv色彩空间类型转换
  • LLM微调(精讲)-以高考选择题生成模型为例(DataWhale AI夏令营)
  • 前端创作纪念日
  • go语言协程之间的同步
  • 第十章、 异常Exception
  • 东土科技车规级网络芯片获批量应用
  • 分享一款快速APP功能测试工具
  • 〔开发系列〕一次关于小程序开发的深度总结
  • cookie和session
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Redis中的lru算法实现
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 高程读书笔记 第六章 面向对象程序设计
  • 理解在java “”i=i++;”所发生的事情
  • 那些年我们用过的显示性能指标
  • 批量截取pdf文件
  • 前端存储 - localStorage
  • 思维导图—你不知道的JavaScript中卷
  • 正则与JS中的正则
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #include到底该写在哪
  • #mysql 8.0 踩坑日记
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (35)远程识别(又称无人机识别)(二)
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (理论篇)httpmoudle和httphandler一览
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (排序详解之 堆排序)
  • (区间dp) (经典例题) 石子合并
  • (四)Controller接口控制器详解(三)
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)图像的%2线性拉伸
  • ****Linux下Mysql的安装和配置
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net Core中Quartz的使用方法
  • .NET 药厂业务系统 CPU爆高分析
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET命名规范和开发约定
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .project文件
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @Autowired和@Resource的区别
  • @RequestMapping处理请求异常
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限