Java设计模式之创建型模式介绍与说明
·
关于我:IT从业5年,主要擅长Java技术栈相关内容,致力于分享Java技术相关的文章,关注我不迷路,一起努力提升技术人的核心能力。交个朋友吧,我是一个爱好广泛,灵魂有趣的人~
私我,可免费领取Java学习资源~
——————分割线——————
一、创建型模式概述
创建型模式(5种)专注于对象的创建过程,通过封装对象创建逻辑,降低系统耦合度,提升代码的灵活性与复用性。其核心目标是避免硬编码类名,解耦客户端与具体实现。
二、五种创建型模式详解
1. 单例模式(Singleton Pattern)
- 核心思想:确保一个类仅有一个实例,并提供全局访问点。
- 实现方式:
- 饿汉式:类加载时初始化,线程安全但可能浪费内存(如枚举式实现)。
- 懒汉式:延迟加载,需同步锁保证线程安全(如
synchronized getInstance())。 - 双重校验锁:减少同步开销(如
volatile关键字确保可见性)。 - 静态内部类:利用类加载机制保证线程安全且延迟加载。
- 枚举类:最安全的实现,天然防止反射攻击(推荐使用)。
- 应用场景:
- 全局配置中心、日志管理器、数据库连接池。
- 代码示例(枚举式):
public enum Singleton { INSTANCE; public void doSomething() { /* ... */ } } - 原则:开闭原则、依赖倒置。
2. 工厂方法模式(Factory Method Pattern)
- 核心思想:定义一个接口,由子类决定实例化对象。
- 实现方式:
- 简单工厂:静态方法根据参数返回不同对象(违反开闭原则)。
- 工厂方法:抽象类定义
create()方法,子类实现具体逻辑(符合开闭原则)。 - 静态工厂方法:通过静态方法直接调用(如
String.valueOf())。
- 应用场景:
- 动态创建对象(如邮件发送器、支付网关)。
- 代码示例(工厂方法):
abstract class Creator { public abstract Product factoryMethod(); } class ConcreteCreator extends Creator { @Override public Product factoryMethod() { return new ConcreteProduct(); } } - 原则:开闭原则、里氏替换。
3. 抽象工厂模式(Abstract Factory Pattern)
- 核心思想:提供一个接口,创建相关或依赖的对象家族。
- 实现方式:
- 定义抽象工厂接口,子类实现具体工厂。
- 应用场景:
- 跨平台UI组件(如Windows/Mac风格)。
- 代码示例:
interface AbstractFactory { Color createColor(); Shape createShape(); } class ShapeFactory implements AbstractFactory { @Override public Color createColor() { return new Red(); } @Override public Shape createShape() { return new Circle(); } } - 原则:合成复用、接口隔离。
4. 建造者模式(Builder Pattern)
- 核心思想:分步骤构建复杂对象,分离构建与表示。
- 实现方式:
- Director:控制构建流程。
- Builder:定义构建步骤(如
buildPartA())。
- 应用场景:
- 复杂对象初始化(如MyBatis的
SQLSession)。
- 复杂对象初始化(如MyBatis的
- 代码示例:
class Product { private String buyer; private String contract; } interface IProductBuilder { void buildBuyer(); void buildContract(); Product getProduct(); } class ConcreteBuilderA implements IProductBuilder { private Product product = new Product(); @Override public void buildBuyer() { product.buyer = "Alice"; } @Override public void buildContract() { product.contract = "Alice's Contract"; } @Override public Product getProduct() { return product; } } - 原则:开闭原则、合成复用。
5. 原型模式(Prototype Pattern)
- 核心思想:通过克隆现有对象创建新实例。
- 实现方式:
- 浅拷贝:默认
Object.clone(),仅复制基本类型与引用。 - 深拷贝:自定义克隆逻辑(如序列化)。
- 浅拷贝:默认
- 应用场景:
- 高开销对象的快速克隆(如游戏中的敌人复制)。
- 代码示例(深拷贝):
class Sheep implements Cloneable { private String name; private Date birth; @Override protected Object clone() throws CloneNotSupportedException { Sheep obj = (Sheep) super.clone(); obj.birth = (Date) this.birth.clone(); // 深拷贝Date对象 return obj; } } - 原则:合成复用、接口隔离。
三、模式对比与选择
| 模式 | 适用场景 | 关键优势 |
|---|---|---|
| 单例模式 | 全局唯一实例 | 线程安全、资源复用 |
| 工厂方法 | 动态创建对象 | 符合开闭原则 |
| 抽象工厂 | 创建对象家族 | 解耦客户端与具体实现 |
| 建造者 | 复杂对象分步构建 | 灵活扩展构建步骤 |
| 原型模式 | 高开销对象克隆 | 减少初始化成本 |
四、设计原则与最佳实践
- 开闭原则:优先使用工厂方法、抽象工厂,避免硬编码类名。
- 线程安全:单例模式需选择枚举式或双重校验锁。
- 性能优化:原型模式适用于频繁克隆的场景,但需注意深拷贝开销。
- 代码复用:建造者模式通过组合步骤提升可扩展性。
更多推荐
所有评论(0)