要学习设计模式,首先要明白设计模式,就是为实现某一种或某一组功能提供的代码编码方式.它没有固定的套路,只有约定俗成的风格.所有编码者可以根据已有的设计模式开放思维,设计出自己的设计模式,也会在无意中使用某些设计模式.
接下来我们举几个常用的模式例子
一..>单例模式
1.作用
-保证整个应用中某个实例有且只有一个
2.应用场合
-某些对象只需在应用在创建一个
3.饿汉模式 -- 加载类时的速度比较慢,运行时调用类的速度比较快,所属线程安全
-所属类加载时,不论其实例是否调用,都会被加载
//1.私有化默认构造方法
private Singleton(){}
//2.创建类的唯一实例
private static Singleton instance = new Singleton();
3.//提供一个获取实例的方法,并将此方法转换为类方法
return instance;
}
调用
Singleton s1 = Singleton.getInstance();
4.懒汉模式 -- 加载类时的速度比较快,运行时调用线程的速度比较慢,线程不安全
在提供给外部的构造方法中进行实例化
二..>代理模式 -->Spring的核心设计思想
1.概念
以其他模式提供一种代理以控制对这个对象的访问
去掉了某些功能或增加了某些服务
2.模式
远程代理 -- 客户端--服务器
虚拟代理 -- 将一个需要资源很大的对象延时访问,真正需要的时候才创建
保护代理 -- 权限控制
智能引用代理 --
---静态代理:代理和被代理对象在代理之前是确定的.他们都实现相同的接口或者继承相同的抽象类
----继承:功能的叠加会使代理类无限叠加(不推荐)
----聚合:增加功能的先后循序只需调整调用顺序
---动态代理:代理类和被代理对象之间加入代理处理类
----JDK动态代理:只能代理实现了接口的类
----CGLib动态代理:对指定目标类产生一个子类,通过方法拦截所有父类方法的调用
3.动态代理实现思路:通过Proxy的newProxyInstance返回代理对象
-声明一段源码(动态产生代理)
-编译源码(JDK Compiler API) 产生新的类(代理类)
-将这个类load到内存中,产生一个新的对象(代理对象)
-return 代理对象
4.应用场景
--当调用某个jar中的方法,我们不方便修改其源码时,就可以用代理在方法前后加入某些代码 -- AOP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端