工厂方法模式

本文介绍了工厂方法模式,这是一种创建型设计模式,它定义了创建对象的接口,并由子类决定实例化哪个类。该模式的主要优点是保持了代码的解耦,使得客户端可以独立于具体的产品实现进行扩展。文中通过数据库驱动器的创建示例,展示了如何在简单工厂模式和工厂方法模式中使用此模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

创建对象时,不会对客户端暴露创建逻辑,使用一个共同的接口指向新创建的对象。

意图: 定义一个创建对象的接口,让子类决定自己实例化哪一个类。Factory Method使一个类的实例化延迟到子类。

主要解决: 解决接口选择的问题。

何时使用:

  1. 不知道该使用对象的确切类型,需要在不同的条件下创建不同的实例时
  2. 希望为框架提供扩展其内部组件的方法时

如何解决: 让其子类实现工厂接口,返回一个抽象对象。

关键代码: 创建过程在子类进行。

主要优点:

  1. 符合单一职责原则
  2. 符合开闭原则
  3. 客户端不用关心产品具体实现细节,将具体产品与客户端代码解耦

实现类图

工厂方法模式

实现示例

数据库连接需要驱动器,下面使用工厂模式创建驱动器,用于连接数据库。

驱动器有Mysql、Oracle两种,驱动工厂提供创建驱动器方法。

public interface Driver{
    void connect();
}

class MysqlDriver implements Driver{

    @Override
    public void connect() {
        System.out.println("Mysql连接");
    }
}

class OracleDriver implements Driver{

    @Override
    public void connect() {
        System.out.println("Oracle连接");
    }
}

简单工厂模式

class SimpleDriverFactory{
    public static Driver createDriver(String driverType){
        Driver driver = null;
        switch (driverType){
            case "Oracle":
                driver = new OracleDriver();
                break;
            case "Mysql":
                driver = new MysqlDriver();
                break;
            default:
                driver = null;

        }
        return driver;
    }
}

工厂模式

interface DriverFactory{
     Driver createDriver();
}

class OracleDriverFactory implements DriverFactory{

    @Override
    public Driver createDriver() {
        return new OracleDriver();
    }
}

class MysqlDriverFactory implements DriverFactory{

    @Override
    public Driver createDriver() {
        return new MysqlDriver();
    }
}

使用

public class FactoryPattern {

    public static void main(String[] args) {
        //工厂模式
        DriverFactory driverFactory = new MysqlDriverFactory();
        Driver driver = driverFactory.createDriver();
        driver.connect();

        //简单工厂
        Driver oracleDriver = SimpleDriverFactory.createDriver("Oracle");
        oracleDriver.connect();

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cuidianjay

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值