首页 > 编程语言 >Java常见设计模式简介

Java常见设计模式简介

时间:2024-08-11 19:27:47浏览次数:9  
标签:动态 Java 对象 简介 代理 模式 实例 接口 设计模式

设计模式

什么是单例,如何实现

一个类只能有一个实例,主要用于需要频繁使用的对象避免频繁初始化和销毁来提高性能,或者资源需要相互通信的环境

主要实现方式有,饿汉模式,懒汉模式,枚举,静态内部类

饿汉模式,是在类加载过程中就将这个单例对象实例化,需要将构造方法私有化,定义一个成员变量并new一个该类的实例作为初始值,提供一个公共的静态方法获取这个实例

懒汉模式,是在使用时才创建这个单例对象,需要将构造方法私有化,定义一个该类的成员变量不赋初始值,提供一个获取实例的公共静态方法。特别注意这个方法需要保证多线程环境下的并发安全性,可以通过DCL加volatile关键字来解决

枚举,直接在枚举中定义字段,它就是单例并且线程安全的

静态内部类,在类中搞一个静态内部类,在静态内部类中搞一个目标类的静态成员变量并且new一个实例作为初始值。然后在目标类中定义一个获取实例的静态方法,方法返回的就是静态内部类中的成员变量。这种方式能保证线程安全,也能实现延迟加载。缺点是这种方式传参不太方便

模板模式的作用

定义一个算法骨架,而将某个或多个具体的实现延迟到子类中,使得子类可以在不修改当前算法的结构情况下,重新定义当前算法的某些特定步骤

比如考试中所有考生的试卷都一样,答案由每个考生自己完成

什么是适配器模式

将不兼容的接口转换为可兼容的接口的中间类

比如HandlerInterceptorAdapter ,我们定义拦截器时不需要覆写HandlerInterceptor中的所有方法,因为适配器类帮我们做了空实现。但JDK1.8之后,给接口中增加了默认方法,可以有方法体,因此这些适配器类已经失去作用了

什么是代理模式?有几种代理?

不直接使用实际对象,通过调用代理对象间接调用实际对象,主要用作对实际对象的增强,分为静态代理,JDK动态代理,CGLIB动态代理

JDK动态代理和CGLIB动态代理的区别?

JDK动态代理是jdk提供的,我们可以直接使用,而CGLIB需要导入第三方库

JDK动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用目标方法前调用InvokeHandler来处理

CGLIB动态代理是先加载目标类的class文件,然后修改其字节码生成子类来实现的

常见的设计模式说一下

单例模式:一个类只能有一个实例,分为饿汉模式(迫切加载)和懒汉模式(延迟加载)和枚举。

工厂模式:隐藏了产品的复杂创建过程,实现生产功能的复用,让产品生产更加高效。分为简单工厂(需要来回切换生产线),工厂方法(开设新的生产线),抽象工厂(制定创建产品的接口,让子工厂选择创建哪种产品)

在Spring中各种的BeanFactory创建bean都用到了

模板模式:定义一个算法骨架或者算法的流程,而不同的实例实现方式不同,将某个或多个具体的实现延迟到子类中,比如RedisTemplate实现了RedisOperations,ElasticSearchTemplate实现了ElasticsearchOperations

代理模式:不直接使用实际对象,通过调用代理对象间接调用实际对象,主要用作对实际对象的增强,分为静态代理,JDK动态代理,CGLIB动态代理比如Spring的AOP原理就是动态代理,当目标对象实现了接口会使用JDK动态代理,没有实现接口会使用CGLIB动态代理

适配器模式:将不兼容的接口转换为可兼容的接口的中间类,比如HandlerInterceptorAdapter ,我们定义拦截器时不需要覆写HandlerInterceptor中的所有方法,因为适配器类帮我们做了空实现。但JDK1.8之后,给接口中增加了默认方法,可以有方法体,因此这些适配器类已经失去作用了

观察者模式:当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,比如Spring中的ApplicationListener

标签:动态,Java,对象,简介,代理,模式,实例,接口,设计模式
From: https://blog.csdn.net/qq_56438516/article/details/141072349

相关文章

  • Java基础7
    面向对象的特征一:封装性随着我们系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握好,面向对象的开发原则要遵循“高内聚、低耦合”高内聚:类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用,尽量方便外部调用。何为封装性?所谓封装性,就是把客......
  • Java超市收银系统(四、收银功能)
    引言        今天,我们实现收银功能。系统显示“请输入商品条形码(6位数字字符):”,用户输入的条形码在商品表中存在,则显示“输入商品数量:”,否则,提示“您输入的商品条形码不存在,请确认后重新输入”,条形码和数量输入完毕后在销售明细表中增加一条记录(各字段信息如下:流水号......
  • Java超市收银系统(三、密码修改)
    引言        我们还是用之前使用的方法,只不过这次是为了实现密码修改功能,在4个包除了vo包,其余我们都需要修改增加。功能函数包(增删改查)—dao        在我们对数据库进行简单操作时,最主要的数据操作就是增加、删除、修改、查询,我们之前已经写了用户名查询函......
  • Java超市收银系统(一、用户登录)
    引言        今天,我们来学习一下如何用java写一个简单的系统(后续内容包括网络连接、数据库连接、json字符串编码、爬虫、数据增删改查、线程处理等等)会不间断更新,首先是环境配置要求,我们需要在maven库中下载4个包,分别是Jsoup、Gson、JXL、mysql用于字符串解析、数据库......
  • Java计算机毕业设计的场馆预订系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全民健身热潮的兴起和体育产业的蓬勃发展,体育场馆作为体育活动的重要载体,其高效管理和便捷服务需求日益凸显。然而,传统的手工预订或简单的在线预......
  • Java计算机毕业设计的蛋糕店线上选购系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网的飞速发展,电子商务已成为现代消费模式的重要组成部分,深刻改变了人们的购物习惯。在食品行业,尤其是烘焙领域,线上购物因其便捷性、多样性及......
  • Java计算机毕业设计宠物领养系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人们生活水平的提高,宠物已成为许多家庭不可或缺的一员,它们不仅为人们的生活带来了欢乐与陪伴,还促进了人与自然的和谐共处。然......
  • JetBrains IntelliJ IDEA 2024.2 (macOS, Linux, Windows) - 领先的 Java 和 Kotlin I
    JetBrainsIntelliJIDEA2024.2(macOS,Linux,Windows)-领先的Java和KotlinIDE请访问原文链接:https://sysin.org/blog/jetbrains-idea/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsIntelliJIDEA-领先的Java和KotlinIDE使开发更高效、更......
  • Java计算机毕业设计的多媒体的应用(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:随着信息技术的飞速发展,多媒体技术在各行各业的应用日益广泛且深入,彻底改变了信息的传播与接收方式。在数字化时代,视频作为多媒体信息的重要载体,凭借......
  • Java计算机毕业设计的党员信息数据可视化分析平台(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,数据已成为推动社会进步和组织管理优化的重要力量。在党建工作中,党员信息作为核心资源,其管理与利用直接关系到党组织决策的科......