Java 23种设计模式是面向对象编程中至关重要的一部分,它们是可复用的软件设计经验的总结,旨在提高代码的可读性、可靠性和可维护性。这些模式源自《设计模式:可复用面向对象软件的基础》一书,由埃里克·盖伊等人提出,将设计模式划分为三大类别:
1. **创建型模式** (5种):
- 工厂方法模式:提供一个创建对象的接口,但让子类决定实例化哪一个类。
- 抽象工厂模式:创建一系列相关或相互依赖的对象,而无需指定它们具体的类。
- 单例模式:确保一个类只有一个实例,并提供全局访问点。
- 建造者模式:将复杂产品的构建步骤分解为多个互不依赖的步骤,允许用户定制产品。
- 原型模式:通过克隆现有的对象来创建新的对象,用于高效地创建大量相似对象。
2. **结构型模式** (7种):
- 适配器模式:使得原本设计不兼容的接口能够协同工作。
- 装饰器模式:动态地给一个对象增加额外的功能,而无需修改其源代码。
- 代理模式:为其他对象提供一种代理以控制对这个对象的访问。
- 外观模式:提供一个统一的接口来访问一组复杂的子系统,隐藏其内部结构。
- 桥接模式:将抽象部分和实现部分解耦,使它们可以独立变化。
- 组合模式:将对象组合成树形结构来表示“部分-整体”关系。
- 享元模式:减少系统中频繁创建和销毁的对象数量,提高内存效率。
3. **行为型模式** (11种):
- 策略模式:定义一组算法,让它们之间可以互换,而无需修改使用算法的客户。
- 模板方法模式:定义算法的框架,留给子类去实现具体步骤。
- 观察者模式:定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知。
- 迭代子模式:提供一个操作的顺序执行框架,而将实际的操作延迟到子类中。
- 责任链模式:将请求沿着链传递,直到遇到第一个可以处理它的人。
- 命令模式:封装了请求,使你能够支持命令的撤销,以及改变请求的执行时间。
- 备忘录模式:记录计算结果,避免重复计算,适用于那些可能有副作用的函数。
- 状态模式:允许对象在运行时改变其行为,而不影响客户端。
- 访问者模式:让多个对象共享同一数据结构,并提供一个接口让这些对象“访问”数据结构的不同方面。
- 中介者模式:定义一个对象来封装一系列的对象交互,使其耦合松散,降低系统的复杂性。
- 解释器模式:将一个表达式或程序转换为等价的树结构,然后使用递归进行求值。
除了这三大类,还有一些特定场景下的并发型模式和线程池模式,这些模式关注并发和多线程编程中的优化和协调。
学习和掌握这些设计模式有助于软件开发者在实际项目中编写更高效、灵活且易于维护的代码,提升团队协作效率,成为更出色的软件工程师。在学习过程中,可以参考博主maowang在2013年的一篇详尽解析文章,以及相关的源码下载链接,通过理论与实践相结合的方式加深理解。