工厂方法模式(一)

简单工厂模式固然好用,但是也存在很多缺点。由于创建对象是静态的,而且工厂是公共的,并且存在判断逻辑,当类多了以后,会造成代码的冗余,不利于扩展,每次扩展,都需要修改工厂类中的判断逻辑,不符合“开闭原则”,基于这种现状,引申出工厂方法模式。  

public interface Logger {
    void writeLog();
}

public class DatabaseLogger implements Logger {
    @Override
    public void writeLog() {
        System.out.println("DatabaseLogger");
    }
}

public class FileLogger implements Logger {
    @Override
    public void writeLog() {
        System.out.println("FileLogger");
    }
}

public interface LoggerFactory {
    Logger createLogger();
}

public class DatabaseLoggerFactory implements LoggerFactory {

    @Override
    public Logger createLogger() {
        Logger logger = new DatabaseLogger();
        return logger;
    }
}

public class FileLoggerFactory implements LoggerFactory {
    @Override
    public Logger createLogger() {
        Logger logger = new FileLogger();
        return logger;
    }
}

通过类图和代码,再对比上一篇简单工厂的博客可以发现,工厂方法模式在简单工厂方法上又做了一层抽取,在使用起来更为灵活,具工厂搭配具体产品,不需要再像简单工厂那样通过if...else...去判断到底创建哪个对象。

工厂方法有如下几个概念,分别是:抽象产品(Product)、具体产品(ConcreteProduct)、抽象工厂(Factory)、具体工厂(ConcreteFactory),相比于简单工厂,多了抽象工厂和具体工厂这层概念。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值