关于我:IT从业5年,主要擅长Java技术栈相关内容,致力于分享Java技术相关的文章,关注我不迷路,一起努力提升技术人的核心能力。交个朋友吧,我是一个爱好广泛,灵魂有趣的人~

私我,可免费领取Java学习资源~

——————分割线——————

一、创建型模式概述

创建型模式(5种)专注于对象的创建过程,通过封装对象创建逻辑,降低系统耦合度,提升代码的灵活性与复用性。其核心目标是避免硬编码类名,解耦客户端与具体实现。


二、五种创建型模式详解

1. 单例模式(Singleton Pattern)

  • 核心思想:确保一个类仅有一个实例,并提供全局访问点。
  • 实现方式:
    1. 饿汉式:类加载时初始化,线程安全但可能浪费内存(如枚举式实现)。
    2. 懒汉式:延迟加载,需同步锁保证线程安全(如synchronized getInstance())。
    3. 双重校验锁:减少同步开销(如volatile关键字确保可见性)。
    4. 静态内部类:利用类加载机制保证线程安全且延迟加载。
    5. 枚举类:最安全的实现,天然防止反射攻击(推荐使用)。
  • 应用场景:
    • 全局配置中心、日志管理器、数据库连接池。
  • 代码示例(枚举式):
    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)。
  • 代码示例:
    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;
        }
    }
    
  • 原则:合成复用、接口隔离。

三、模式对比与选择

模式适用场景关键优势
单例模式全局唯一实例线程安全、资源复用
工厂方法动态创建对象符合开闭原则
抽象工厂创建对象家族解耦客户端与具体实现
建造者复杂对象分步构建灵活扩展构建步骤
原型模式高开销对象克隆减少初始化成本

四、设计原则与最佳实践

  1. 开闭原则:优先使用工厂方法、抽象工厂,避免硬编码类名。
  2. 线程安全:单例模式需选择枚举式或双重校验锁。
  3. 性能优化:原型模式适用于频繁克隆的场景,但需注意深拷贝开销。
  4. 代码复用:建造者模式通过组合步骤提升可扩展性。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐