阿里 通义千问 Java23种设计模式
Java的23种设计模式是软件开发中常用的解决方案,分为三大类:
创建型模式(5种)用于对象的创建,隐藏创建逻辑,提供更灵活的实例化方式。
-
单例模式(Singleton) - 目的:确保一个类只有一个实例,并提供全局访问点。 - 实现:私有化构造方法,通过静态方法返回唯一实例。 - 示例:线程池、配置管理器。
-
工厂方法模式(Factory Method) - 目的:定义创建对象的接口,让子类决定实例化哪个类。 - 实现:抽象工厂方法,由子类实现具体对象的创建。 - 示例:JDBC的
DriverManager.getConnection()
。 -
抽象工厂模式(Abstract Factory) - 目的:创建一组相关或依赖的对象,而无需指定具体类。 - 实现:提供抽象工厂接口,生产多个系列产品。 - 示例:数据库操作组件的跨数据库支持。
-
建造者模式(Builder) - 目的:将一个复杂对象的构建与表示分离,使构建过程可配置。 - 实现:建造者类逐步构建对象,最终返回完整实例。 - 示例:StringBuilder。
-
原型模式(Prototype) - 目的:通过复制现有实例创建新对象,避免复杂初始化过程。 - 实现:实现
Cloneable
接口,重写clone()
方法。 - 示例:简历复制。
结构型模式(7种)关注类和对象的组合,优化结构,实现功能扩展和灵活性。
-
适配器模式(Adapter) - 目的:将不兼容的接口转换为可兼容的接口。 - 实现:通过适配器类包装不兼容的对象。 - 示例:电源适配器。
-
桥接模式(Bridge) - 目的:将抽象部分与实现部分分离,使它们可以独立变化。 - 实现:抽象类和实现类各自继承,通过组合关联。 - 示例:跨平台的图形界面库。
-
组合模式(Composite) - 目的:将对象组合成树形结构,统一处理单个对象和组合对象。 - 实现:定义统一的接口,包含添加、删除等操作。 - 示例:文件系统目录结构。
-
装饰器模式(Decorator) - 目的:动态地给对象添加额外的职责,不改变其接口。 - 实现:装饰器类实现与原始类相同的接口,包装原始对象。 - 示例:IO流的层层包装。
-
外观模式(Facade) - 目的:为复杂的子系统提供一个简化的统一接口。 - 实现:外观类封装子系统的复杂操作。 - 示例:计算机启动过程封装。
-
享元模式(Flyweight) - 目的:通过共享技术有效支持大量细粒度对象的复用。 - 实现:将对象分为内部状态和外部状态,共享内部状态。 - 示例:字符串池、线程池。
-
代理模式(Proxy) - 目的:为其他对象提供一个代理,控制对其访问。 - 实现:代理类实现与目标类相同的接口,代理实际对象的操作。 - 示例:远程代理、虚拟代理、安全代理。
行为型模式(11种)关注对象之间的通信和职责分配,优化系统行为。
-
责任链模式(Chain of Responsibility) - 目的:将请求的发送者和接收者解耦,多个对象依次处理请求。 - 实现:每个处理者持有下一个处理者的引用,形成链式结构。 - 示例:审批流程。
-
命令模式(Command) - 目的:将请求封装为对象,支持请求的排队、记录、撤销等操作。 - 实现:定义命令接口,包含执行方法。 - 示例:遥控器操作。
-
解释器模式(Interpreter) - 目的:定义语言的文法表示,并解释执行语言中的句子。 - 实现:构建抽象语法树,解释执行。 - 示例:正则表达式引擎。
-
迭代器模式(Iterator) - 目的:提供一种遍历集合元素的方法,不暴露集合内部结构。 - 实现:定义迭代器接口,提供遍历方法。 - 示例:集合类的迭代器。
-
中介者模式(Mediator) - 目的:解耦多个对象之间的复杂交互,通过中介者协调。 - 实现:中介者类负责对象间的通信。 - 示例:聊天室系统。
-
备忘录模式(Memento) - 目的:保存对象内部状态,实现状态的恢复。 - 实现:备忘录类存储状态,管理类负责状态的保存和恢复。 - 示例:游戏中的存档和读档。
-
观察者模式(Observer) - 目的:定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知并自动更新。 - 实现:主题维护观察者列表,状态改变时通知观察者。 - 示例:天气预报系统。
-
状态模式(State) - 目的:允许对象在内部状态改变时改变其行为,看起来像是改变了类。 - 实现:定义状态接口,不同状态实现不同行为。 - 示例:电梯运行状态。
-
策略模式(Strategy) - 目的:定义一系列算法,使它们可以互相替换,不影响客户端使用。 - 实现:定义策略接口,不同策略实现不同算法。 - 示例:排序算法的选择。
-
模板方法模式(Template Method) - 目的:定义算法骨架,将具体步骤延迟到子类实现。 - 实现:抽象类定义模板方法,包含基本方法和抽象方法。 - 示例:数据库访问的通用流程。
-
访问者模式(Visitor) - 目的:在不改变元素类的前提下,定义新的操作作用于元素。 - 实现:访问者接口定义访问方法,元素类接受访问者。 - 示例:文件系统的不同类型文件操作。
这些设计模式为软件开发提供了宝贵的经验总结,灵活运用它们可以提升代码的可重用性、可维护性和可扩展性。