设计模式之抽象工厂模式

目录

概念

UML分析

结构与实现

总结


概念

抽象工厂模式是工厂方法模式的升级版,当需要创建的产品有多个产品线(产品族)时使用抽象工厂模式是比较好的选择。

即:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。

UML分析

结构与实现

这里我们定义两个产品线,产品线一生产数据库连接驱动,产品线儿生产数据库命令驱动

//产品线一 生成连接
interface IConnection{
    void connect();
}
// 产品线二 生产命令
interface ICommand{
    void command();
}
  • 具体产品

Mysql 相关产品

class MysqlConnetion implements IConnection{
    @Override
    public void connect() {
        System.out.println("Mysql connection");
    }
}
class MysqlCommand implements ICommand{
    @Override
    public void command() {
        System.out.println("Mysql...command");
    }
}

Oracle相关产品

class OracleConnetion implements IConnection{
    @Override
    public void connect() {
        System.out.println("Oracle connetion");
    }
}
class OracleCommand implements ICommand {
    @Override
    public void command() {
        System.out.println("Oracle...command");

    }
}
  • 定义抽象工厂
interface IDataBaseFactory {
    IConnection getConnection();
    ICommand getCommand();
}
  • 具体工厂实现
class MysqlFactory implements IDataBaseFactory {
    @Override
    public IConnection getConnection() {
        return new MysqlConnetion();
    }

    @Override
    public ICommand getCommand() {
        return new MysqlCommand();
    }
}




class OracleFactory implements IDataBaseFactory {
    @Override
    public IConnection getConnection() {
        return new OracleConnetion();
    }

    @Override
    public ICommand getCommand() {
        return new OracleCommand();
    }
}
  • 调用
public class AbstractFactory {
    public static void main(String[] args) {
        IDataBaseFactory iDataBaseFactory = new MysqlFactory();
        IConnection connection = iDataBaseFactory.getConnection();
        connection.connect();
        ICommand command = iDataBaseFactory.getCommand();
        command.command();
    }
}
  • 输出

总结

开闭原则的倾斜性
(1) 增加产品族:对于增加新的产品族,抽象工厂模式很好地支持了“开闭原则”,只需要增加具体产品并对应增加一个新的具体工厂,对已有代码无须做任何修改。
(2) 增加新的产品等级结构:对于增加新的产品等级结构,需要修改所有的工厂角色,包括抽象工厂类,在所有的工厂类中都需要增加生产新产品的方法,违背了“开闭原则”。

正因为抽象工厂模式存在“开闭原则”的倾斜性,它以一种倾斜的方式来满足“开闭原则”,为增加新产品族提供方便,但不能为增加新产品结构提供这样的方便,因此要求设计人员在设计之初就能够全面考虑,不会在设计完成之后向系统中增加新的产品等级结构,也不会删除已有的产品等级结构,否则将会导致系统出现较大的修改,为后续维护工作带来诸多麻烦。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值