Java基础教程(204)设计模式之创建型模式:Java设计模式基石:深度剖析创建型模式与实战示例

1. 单例模式(Singleton Pattern)

单例模式确保一个类仅有一个实例,并提供全局访问点。适用于需要频繁创建和销毁的对象,或避免多个实例产生冲突的场景。

public class Singleton {
    private static volatile Singleton instance;
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

2. 工厂方法模式(Factory Method Pattern)

定义一个创建对象的接口,但让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类,完美遵循开闭原则。

public interface Logger {
    void log(String message);
}

public class FileLogger implements Logger {
    @Override
    public void log(String message) {
        // 记录日志到文件
    }
}

public abstract class LoggerFactory {
    public abstract Logger createLogger();
    
    public void writeLog() {
        Logger logger = createLogger();
        logger.log("日志消息");
    }
}

3. 抽象工厂模式(Abstract Factory Pattern)

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。适用于产品族的创建,支持系统切换产品系列。

public interface Button {
    void render();
}

public interface TextField {
    void display();
}

public interface GUIFactory {
    Button createButton();
    TextField createTextField();
}

// 具体工厂实现
public class WindowsFactory implements GUIFactory {
    @Override
    public Button createButton() {
        return new WindowsButton();
    }
    
    @Override
    public TextField createTextField() {
        return new WindowsTextField();
    }
}

4. 建造者模式(Builder Pattern)

将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。特别适用于具有多个构造参数且需要灵活组合的场景。

public class Computer {
    private final String CPU;
    private final String RAM;
    private final String storage;
    
    private Computer(Builder builder) {
        this.CPU = builder.CPU;
        this.RAM = builder.RAM;
        this.storage = builder.storage;
    }
    
    public static class Builder {
        private String CPU;
        private String RAM;
        private String storage;
        
        public Builder setCPU(String CPU) {
            this.CPU = CPU;
            return this;
        }
        
        public Builder setRAM(String RAM) {
            this.RAM = RAM;
            return this;
        }
        
        public Builder setStorage(String storage) {
            this.storage = storage;
            return this;
        }
        
        public Computer build() {
            return new Computer(this);
        }
    }
}

5. 原型模式(Prototype Pattern)

用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。适用于创建成本较高的对象,或需要动态配置系统的场景。

public abstract class Shape implements Cloneable {
    private String id;
    protected String type;
    
    abstract void draw();
    
    public String getType() {
        return type;
    }
    
    public String getId() {
        return id;
    }
    
    public void setId(String id) {
        this.id = id;
    }
    
    @Override
    public Object clone() {
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }
}

// 具体原型类
public class Rectangle extends Shape {
    public Rectangle() {
        type = "Rectangle";
    }
    
    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}

总结:创造的艺术

创建型模式为我们提供了五种不同的对象创建解决方案,每种模式都解决了特定的问题域:

  • 单例模式:控制实例数量,节约系统资源
  • 工厂方法:解耦客户端与具体产品,支持扩展
  • 抽象工厂:管理产品家族,保持产品兼容性
  • 建造者模式:分步构建复杂对象,灵活组合部件
  • 原型模式:通过克隆提高性能,避免重复初始化

掌握这些模式不仅能够写出更加优雅的代码,更能深刻理解面向对象设计中"抽象"与"解耦"的核心哲学。根据具体场景选择合适的创建型模式,是迈向高级软件工程师的重要一步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值