设计模式-工厂方法模式 Java

模式概述

工厂方法模式(Factory Method Pattern)又称为工厂模式,定义创建对象的接口,但将具体实现延迟到子类,实现对象创建与使用的解耦。

简单代码示例

// 1. 抽象产品:日志记录器接口
interface Logger {
    void log(String message);
}

// 2. 具体产品:文件日志记录器
class FileLogger implements Logger {
    @Override
    public void log(String message) {
        System.out.println("【文件日志】" + message);
    }
}

// 3. 具体产品:控制台日志记录器
class ConsoleLogger implements Logger {
    @Override
    public void log(String message) {
        System.out.println("【控制台日志】" + message);
    }
}

// 4. 抽象工厂:定义工厂方法
abstract class LoggerFactory {
    // 核心工厂方法(可包含默认实现)
    public abstract Logger createLogger();
    
    // 扩展方法(非必需)
    public void writeLog(String message) {
        Logger logger = createLogger();
        logger.log(message);
    }
}

// 5. 具体工厂:创建文件日志器
class FileLoggerFactory extends LoggerFactory {
    @Override
    public Logger createLogger() {
        return new FileLogger(); // 返回具体产品
    }
}

// 6. 具体工厂:创建控制台日志器
class ConsoleLoggerFactory extends LoggerFactory {
    @Override
    public Logger createLogger() {
        return new ConsoleLogger(); // 返回具体产品
    }
}

// 7. 客户端调用
public class Client {
    public static void main(String[] args) {
        // 使用文件日志工厂
        LoggerFactory fileFactory = new FileLoggerFactory();
        fileFactory.writeLog("用户登录成功");
        
        // 使用控制台日志工厂
        LoggerFactory consoleFactory = new ConsoleLoggerFactory();
        consoleFactory.writeLog("数据校验通过");
    }
}

运行结果:

【文件日志】用户登录成功
【控制台日志】数据校验通过

技术细节

1.模式组成

组件职责说明
抽象产品定义产品的公共接口
具体产品实现抽象产品的具体类
抽象工厂声明工厂公共方法
具体工厂实现工厂方法,返回具体产品

2.优点与缺点

优点:

  • 解耦:客户端无需感知具体产品类名
  • 扩展性:新增产品只需添加工厂子类(符合开闭原则)
  • 可维护性:创建逻辑集中管理,避免代码重复
  • 多态性:支持运行时动态切换产品类型

缺点:

  • 类数量膨胀:每增加一个产品类型,需同步增加具体工厂类,导致类数量翻倍增长
  • 复杂度提升:实现时可能需要用到DOM、反射等技术,增加了系统的实现难度
  • 代码冗余:简单创建逻辑时显得过度设计(如只有1-2种固定产品)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值