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

Java类设计模式

1、单例模式

核心:保证一个类只有一个对象,并且提供一个访问该实例的全局访问点
五种单例模式:
	主要:
		饿汉式:线程安全,调用效率高,不能延时加载
		懒汉式:线程安全,调用效率低,可以延时加载
	其它:
		枚举单例:线程安全,调用效率高,不能延时加载(可以天然防止反射和反序列化漏洞)
		静态内部类式:线程安全,调用效率低,可以延时加载
		双重检索式
如何选择:
	占用资源少且不需要延时加载:枚举>饿汉
	占用资源多且需要延时加载:静态内部>懒汉

2、工厂模式

创建者与调用者分离
核心:实例化对象,甩工厂方法代替new操作
简单工厂模式(常用):不完全满足OPC原则
工厂方法模式:
抽象工厂模式:	

3、建造者模式

Builder构造	Director 装配

4、原型模式

实现Cloneable中来自object中的clone方法
	Object obj=(Object)Super.clone();
	return obj;
深克隆:
	Sheep s=(Sheep) obj;
	s.birthday=(Date)this.birthday.clone();
或者通过序列化和反序列化实现深复制

5、适配器模式(adapter)
6、代理模式(proxy pattern)

AOP(Aspect Oriented Programming)面向切面编程,其核心就是代理模式
核心角色:
	     抽象角色(客户,定义代理角色和真实角色的公共对外方法)
	        ^                                ^
  代理角色(实现抽象角色)      ->         真实角色(实现抽象角色)

7、静态代理模式(客户-经纪人-演员)
8、动态代理模式
9、桥接模式

将多个维度的东西比如:电脑品牌与电脑类型分别来表示,然后通过参数形式将二者结合起来。
适用的场景:
	处理多层继承结构、处理多维度变化的场景、将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关系。

10、组合模式(component)

把部分与整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。

11、装饰模式(decorator)
动态的为一个对象增加新的功能
12、外观模式
迪米特法则(封装):
一个软件实体应当尽可能少的与其他实体发生相互作用。
13、享元模式(Fly weight)

如果有多个完全相同或者相似的对象,我们可以通过享元模式节省内存。
享元对象能够做到共享的关键是区分了内部状态和外部状态。
内部状态:可以共享,不会随着环境变化而改变
外部状态:不可以共享,会随着环境变化而改变

14、责任链模式(chain of responsibility)

将能够处理同一类请求的对象连成一条链,请求沿着链传递,如果能够处理就处理,处理不了就向后传递。

15、迭代器模式(iterator)

提供一种可以遍历聚合对象的方式
聚合对象:存储数据		
迭代器:遍历数据

16、中介者模式(mediator)

17、命令模式(commend)

将一个请求封装成对象,从而我们可以使用不同的请求对客户进行参数化。

18、策略模式(strategy)
19、模板方法模式(Template method)

定义好模板,核心内容用到再实现,模板中定义为抽象方法

20、状态模式(state)

不同状态对应不同行为,用于解决系统中复杂对象的状态转换以及不同状态下行为的封装。

21、观察者模式(observe)

广播,1:N的通知,当目标对象的状态发生改变时,他需要及时告知一系列观察者对象,令他们做出响应。
JAVASE提供了java.util.observable类和java.util.observer接口来实现观察者模式。

22、备忘录模式(memento)

保存某个对象内部状态的拷贝,以后就可以将该对象恢复到原先的状态。
源发器类:包括备份数据与恢复数据两种方法
备忘录类:通过构造器的方法来进行数据备份
负责人类:负责管理备忘录提供备忘录的get/set方法

http://www.kler.cn/news/328786.html

相关文章:

  • Unity3D 客户端多开
  • LeetCode[中等] 55.跳跃游戏
  • Android 13.0 系统wifi列表显示已连接但无法访问网络问题解决
  • 使用 PHP 的 strip_tags函数保护您的应用安全
  • UE5.4.3 Replay 重播回放系统
  • [Mysql]锁总结
  • C++中,如何使你设计的迭代器被标准算法库所支持。
  • k8s的控制节点不能访问node节点容器的ip地址
  • Scrapy入门
  • 深度学习 Transformer 的标签平滑(Label Smoothing)
  • 计算机视觉小目标检测模型
  • 【Golang】深入解读Go语言中的错误(error)与异常(panic)
  • Base64编码避坑指南
  • Skip、Compose、Flutter和RN
  • 面试金典题3.2
  • 在C语言中,符号有两个主要用途:
  • Rainbond 助力城建智控,从传统开发到敏捷开发转型
  • 算法必学之LRU
  • Gson将对象转换为JSON(学习笔记)
  • 【C++高阶】深入理解C++智能指针:掌握RAII与内存安全的利器
  • 南沙C++信奥赛陈老师解一本通题 2005:【20CSPJ普及组】直播获奖
  • Vue3.X + SpringBoot小程序 | AI大模型项目 | 饮食陪伴官
  • Python知识点:如何使用AWS Greengrass与Python进行边缘计算
  • 64 注意力机制_by《李沐:动手学深度学习v2》pytorch版
  • 【计网】从零开始学习http协议 --- http的请求与应答
  • Stable Diffusion绘画 | 来训练属于自己的模型:素材准备篇
  • 【AI知识点】嵌入向量(Embedding Vector)
  • 明达技术工业级边缘计算网关:智能制造的智慧纽带
  • Docker安装consul + go使用consul + consul知识
  • WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!