Java设计模式:抽象工厂模式

本文介绍了抽象工厂模式的概念,强调了其在创建一系列相关对象时的作用,确保对象间的兼容性,并降低了客户端与具体实现的耦合。通过数据库操作的例子,展示了如何创建MySQL和Oracle数据库的连接和命令对象,从而在客户端代码中灵活切换不同的数据库实现。
摘要由CSDN通过智能技术生成

抽象工厂模式

定义:

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

抽象工厂模式主要用于创建相关对象的家族。当一个产品族中需要被设计在一起工作时,通过抽象工厂模式,能够保证客户端始终只使用同一个产品族中的对象;并且通过隔离具体类的生成,使得客户端不需要明确指定具体生成类;所有的具体工厂都实现了抽象工厂中定义的公共接口,因此只需要改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。

应用场景:

程序需要处理不同系列的产品,但是你不希望它依赖于这些产品的具体类是,可以使用抽象工厂。

优点:

  1. 可以确信从工厂得到的产品是彼此兼容的
  2. 可以避免具体产品和客户端代码之间的紧密耦合
  3. 符合单一职责原则
  4. 符合开闭原则

代码示例:

我们以数据库举例,数据库的,connection、command是不变的。数据库产品是变化的,如MySQL、Oracle等数据库。

数据库相关代码:

interface DataBase {
    Connection getConnection();
    Command getCommand();
}

interface Connection {
    void connection();
}

interface Command {
    void command();
}

MySQL相关代码:

class MySQLDataBase implements DataBase{

    public Connection getConnection() {
        return new MySQLConnection();
    }

    public Command getCommand() {
        return new MySQLCommand();
    }
}

class MySQLConnection implements Connection {

    public void connection() {
        System.out.println("MySQL数据库建立连接...");
    }
}

class MySQLCommand implements Command {

    public void command() {
        System.out.println("MySQL数据库发送指令...");
    }
}

Oracle代码:

class OracleDataBase implements DataBase {

    public Connection getConnection() {
        return new OracleConnection();
    }

    public Command getCommand() {
        return new OracleCommand();
    }
}

class OracleConnection implements Connection{

    public void connection() {
        System.out.println("Oracle数据库建立连接...");
    }
}

class OracleCommand implements Command {

    public void command() {
        System.out.println("Oracle数据库发送指令...");
    }
}

客户端相关代码:

public class AbstractFactory {

    public static void main(String[] args) {
        DataBase mysqlDataBase = new MySQLDataBase();
        mysqlDataBase.getConnection().connection();
        mysqlDataBase.getCommand().command();

        DataBase oracleDataBase = new OracleDataBase();
        oracleDataBase.getConnection().connection();
        oracleDataBase.getCommand().command();

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值