话不多说进入正题~
创建型模式:5种
单例模式 (Singleton Pattern)
确保一个类只有一个实例,并提供全局访问点,它的主要目的是限制类的实例化并确保所有代码都共享相同的实例。
--
应用:Runtime类、数据库连接池、Spring Bean的单例模式,日志工具比如SLF4J,它们都只有一个全局对象
工厂模式 (Factory Pattern)将对象的实例化过程封装在一个工厂类中。通过使用工厂方法,可以根据需要创建不同类型的对象,而无需暴露具体的实例化逻辑
--
应用:Spring框架中的BeanFactory和ApplicationContex。它们负责创建和管理对象的实例,并将对象的创建逻辑封装在工厂类中,客户端通过工厂类获取所需的对象实例。
抽象工厂模式 (Abstract Factory Pattern)抽象工厂模式提供了一种方式来创建一系列相关对象的接口,而无需指定具体的类
--
应用:JDBC API中的Connection接口和DriverManager类。Connection接口代表数据库连接对象的抽象,而DriverManager类充当了抽象工厂,负责创建特定数据库厂商的连接对象(比如Oracle、MySQL)
建造者模式 (Builder Pattern)用于创建复杂对象,通过将对象的构建过程分解为多个步骤,使得同样的构建过程可以创建不同的表示
--
应用:StringBuilder和StringBuffer类,它们通过提供一系列方法来动态构建字符串对象,允许按照特定的顺序添加、修改和组装字符串
原型模式 (Prototype Pattern)创建对象的克隆,通过复制现有对象的属性来创建新的对象,而无需通过实例化来创建。它能够提供一种更高效、更灵活的对象创建方式
--
应用:Java的Cloneable接口 ,实现它就具备了原型模式的能力,clone()方法会创建并返回一个新的对象副本,该副本拥有与原始对象相同的属性值。
结构型模式(Structural Patterns): 7种
适配器模式 (Adapter Pattern)
(适配器类) 将一个类的接口转换成客户端所期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类可以协同工作
--
应用:Java集合之间的转换、IO流,比如InputStreamReader(将字节流转为字符流)
桥接模式 (Bridge Pattern)将抽象部分与实现部分分离,使它们可以独立地变化
--
应用:JDBC,抽象部分表示数据库连接的抽象接口,实现部分表示不同数据库的具体实现,而桥接接口充当连接抽象和实现的桥梁
组合模式 (Composite Pattern)通过使用相同的接口来处理单个对象和组合对象,组合模式使得客户端可以一致地对待它们
--
应用:Swing框架中的组件,各种UI组件(如按钮、文本框等)都可以作为单个对象,也可以组合
装饰器模式(Decorator Pattern)在不改变现有对象结构的情况下,动态地将新功能附加到对象上
--
应用:IO流的设计
外观模式 (Facade Pattern)为复杂子系统提供一个简化的接口,以便客户端能够更轻松地使用该系统
--
应用:URL类,提供了一个简单的接口来处理URL的各种操作,隐藏了底层复杂的网络通信细节
享元模式 (Flyweight Pattern)通过共享对象来最大程度地减少内存使用和提高性能,通过创建一个工厂类来管理共享对象,并在需要时返回已存在的对象或创建新对象
--
应用:字符串常量池
代理模式 (Proxy Pattern)通过创建一个代理对象,控制对原始对象的访问。可以在访问原始对象之前或之后添加额外的逻辑,从而实现对原始对象的控制和扩展
--
应用:Java动态代理。在运行时动态地创建代理对象,通过代理对象来间接访问原始对象的方法和属性
行为型模式: 11种
责任链模式 (Chain of Responsibility Pattern)
将请求发送者和接收者解耦,通过将多个对象组成一条责任链,依次处理请求,直到有一个对象能够处理它为止
--
应用:Servlet中的过滤器(Filter)、 Spring框架中的拦截器(Interceptor)
命令模式 (Command Pattern)将请求封装成一个对象,使得可以用不同的请求对客户端进行参数化。
--
应用: 线程池(ThreadPoolExecutor) 每个任务被封装为一个命令对象,线程池通过条件来调度。RabbitMQ每个消息被封装为一个命令对象
解释器模式 (Interpreter Pattern)该模式用于解释语言的语法或表达式,它定义了一个表达式接口,通过解释器来解释并执行特定的语法规则
--
应用:Java正则表达式、 XPath解析器、EL表达式
迭代器模式 (Iterator Pattern)提供了一种顺序访问聚合对象中各个元素的方法,而无需暴露聚合对象的内部表示
--
应用:Java集合框架的迭代器,IO流(readLine()方法)、ResultSet对象的next()方法
中介者模式 (Mediator Pattern)通过一个中介者对象来封装一系列对象之间的交互,使得对象之间不需要显式地相互引用,从而降低了耦合度
--
应用:JVM垃圾回收器、ApplicationContext:负责组件之间的通信和协调
备忘录模式 (Memento Pattern)保存对象的内部状态,并在需要时恢复到之前的状态,提供了一种捕获和恢复对象状态的机制
--
应用:Java事务管理(JTA)
观察者模式 (Observer Pattern)定义了一种一对多的依赖关系,使得多个观察者对象可以同时监听一个主题对象,当主题对象发生变化时,会通知所有观察者对象进行更新
--
应用:Java事件模型(EventObject)中的事件和监听器, Java消息服务(JMS)中消息的发布和订阅机制
状态模式 (State Pattern)允许对象在内部状态改变时改变它的行为,使得对象在不同状态下可以有不同的行为
--
应用:Java线程生命周期(Thread Lifecycle)、Java网络编程中的套接字(Socket)、JVM中的垃圾回收器(Garbage Collector)、Spring中的Bean生命周期
策略模式 (Strategy Pattern)该模式定义了一系列算法,并将每个算法封装到可互换的策略对象中,使得算法可以独立于使用它的客户端进行变化
--
应用:Java集合框架的比较器(Comparator)、Spring的事务管理器(TransactionManager)、Java线程调度器
模板方法模式 (Template Method Pattern)将算法的通用部分放在抽象类中,并将具体的实现细节延迟到子类中,以实现代码的复用和灵活性
--
应用: IO流设计、HttpServlet(doGet()、doPost()方法被子类重写)、Spring的JdbcTemplate
访问者模式 (Visitor Pattern)将数据结构与数据操作分离,使得可以在不改变数据结构的情况下定义新的操作
--
应用:Spring中的AOP功能式允许切面在目标对象的不同方法上执行特定的操作