设计模式之工厂方法模式


前言

大家好,我是练习两年半的Java练习生,最近阅读了《深入浅出设计模式(中文版)》,学习了各种设计模式,所以想出一个专栏和大家分享一下!
如果大家觉得文章还可以,欢迎关注点赞!后续还会陆续更新!!


一、定义

工厂方法模式定义了一个创建对象的接口(广义),但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类,注意这里工厂方法模式有多个工厂类。

二、类图

image.png

三、应用

3.1 需求

使用工厂方法模式来创建不同类型的日志记录器

3.2 分析

使用工厂方法模板的话,我们通过不同的工厂获取不同的日志记录器

3.3 实现

首先,我们需要定义一个抽象的Logger接口,它定义了用于记录日志的方法:

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

然后,我们创建两个具体的Logger实现类:ConsoleLogger和FileLogger:

public class ConsoleLogger implements Logger {
    public void log(String message) {
        System.out.println("[Console] " + message);
    }
}

public class FileLogger implements Logger {
    public void log(String message) {
        System.out.println("[File] " + message);
    }
}

接下来,我们定义一个LoggerFactory接口,它定义了一个工厂方法createLogger(),该方法返回Logger对象:

public interface LoggerFactory {
    Logger createLogger();
}

现在,我们可以创建两个具体的LoggerFactory实现类:ConsoleLoggerFactory和FileLoggerFactory:

public class ConsoleLoggerFactory implements LoggerFactory {
    public Logger createLogger() {
        return new ConsoleLogger();
    }
}

public class FileLoggerFactory implements LoggerFactory {
    public Logger createLogger() {
        return new FileLogger();
    }
}

最后,我们可以在客户端代码中使用工厂方法来创建Logger对象:

LoggerFactory factory = new ConsoleLoggerFactory();
Logger logger = factory.createLogger();
logger.log("Hello, world!");

在上面的代码中,我们首先创建一个ConsoleLoggerFactory对象,然后调用其createLogger()方法来创建一个ConsoleLogger对象。最后,我们调用Logger对象的log()方法来记录一条日志。
如果我们要更改日志记录方式,只需要创建一个新的LoggerFactory实现类,并修改客户端代码来使用它即可。这种方法使得代码更加灵活、可扩展和易于维护。

四、问题

简单工厂模式了解过吗?和工厂方法模式有什么区别?

工厂方法模式有什么好处?


五、总结

以上就是今天要讲的内容,本文简单介绍了设计模式中很常见的工厂方法模式。工厂方法模式的作用是将对象的创建过程封装起来,从而隐藏对象创建的细节,让客户端通过调用工厂方法来获取所需的对象,而无需了解具体的创建过程。
后面我们会讲简单工厂模式还有抽象工厂模式,到时我们就可以看到这些模式的区别和相同之处啦!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值