首页 > 其他分享 >九:抽象工厂模式:生产线的魅力

九:抽象工厂模式:生产线的魅力

时间:2023-04-30 14:05:31浏览次数:30  
标签:模式 工厂 生产线 抽象 魅力 query new public

a. 抽象工厂模式揭秘

想象一下,你走进了一家工厂,看到了各种各样的机器齐头并进,生产着不同的产品。这就是抽象工厂模式(Abstract Factory Pattern)所揭示的魅力。作为一种创建型设计模式,抽象工厂模式提供了一个统一的接口,用于创建一系列相关或依赖的对象,而不需要关心具体的类。

b. 亲身体验:抽象工厂模式实现

让我们以快餐店的例子来看看抽象工厂模式是如何实现的。假设我们需要生产汉堡和饮料,不同品牌的快餐店生产不同口味的产品。 首先,我们定义一个抽象工厂接口,用于生产汉堡和饮料:

public interface FastFoodFactory {
    Hamburger createHamburger();
    Beverage createBeverage();
}

接下来,我们实现两个具体的工厂:麦当劳工厂和肯德基工厂,分别生产各自的汉堡和饮料:

public class McDonaldsFactory implements FastFoodFactory {
    @Override
    public Hamburger createHamburger() {
        return new McDonaldsHamburger();
    }

    @Override
    public Beverage createBeverage() {
        return new McDonaldsCoke();
    }
}

public class KFCFactory implements FastFoodFactory {
    @Override
    public Hamburger createHamburger() {
        return new KFCHamburger();
    }

    @Override
    public Beverage createBeverage() {
        return new KFCPepsi();
    }
}

现在,我们可以使用抽象工厂模式轻松地创建不同品牌快餐店的汉堡和饮料:

public class Client {
    public static void main(String[] args) {
        FastFoodFactory factory = new McDonaldsFactory();
        Hamburger hamburger = factory.createHamburger();
        Beverage beverage = factory.createBeverage();

        // 如果想切换到肯德基,只需要替换工厂实例即可:
        // FastFoodFactory factory = new KFCFactory();
    }
}

c. 双面魅力:抽象工厂模式优缺点

抽象工厂模式具有以下优点:

1、封装性:将具体的产品创建逻辑封装在具体的工厂类中,客户端无需关心具体的实现细节。 2、代码灵活性:如果需要添加新的产品系列,只需添加相应的具体工厂和产品类,无需修改现有代码。

然而,抽象工厂模式也存在一些缺点:

1、难以扩展:如果需要添加一个新的产品(如甜品),我们需要修改抽象工厂接口及其所有实现类,违反了开闭原则。 2. 类数量增多:对于每一个产品系列,都需要创建相应的具体工厂和产品类,可能导致类数量过多。

d. 抽象工厂模式在开源框架中的应用

让我们以Java的JDBC框架为例,了解抽象工厂模式在实际项目中的应用。 在JDBC框架中,我们通常使用DriverManager.getConnection()方法获取一个数据库连接。这个方法的背后就隐藏着抽象工厂模式的应用。对于不同的数据库(如MySQL、Oracle等),我们需要使用不同的数据库驱动,而这些驱动都实现了java.sql.Connection接口。因此,Connection接口充当了抽象产品,而具体的数据库驱动则充当了具体产品。 以下是JDBC框架中抽象工厂模式的简化示例:

public interface Connection {
    void executeQuery(String query);
}

public class MySQLConnection implements Connection {
    @Override
    public void executeQuery(String query) {
        System.out.println("Executing MySQL query: " + query);
    }
}

public class OracleConnection implements Connection {
    @Override
    public void executeQuery(String query) {
        System.out.println("Executing Oracle query: " + query);
    }
}

public class DriverManager {
    public static Connection getConnection(String url) {
        if (url.startsWith("jdbc:mysql")) {
            return new MySQLConnection();
        } else if (url.startsWith("jdbc:oracle")) {
            return new OracleConnection();
        } else {
            throw new UnsupportedOperationException("Unsupported database: " + url);
        }
    }
}

public class Client {
    public static void main(String[] args) {
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb");
        connection.executeQuery("SELECT * FROM users");
    }
}

总结

抽象工厂模式以其独特的魅力为我们提供了一种优雅地创建一系列相关或依赖对象的方法。虽然它在扩展性和类数量方面存在一定的局限性,但仍然是一个广泛应用于各种场景的强大设计模式。通过结合生动、幽默的示例和开源框架的实际应用,我们可以更好地理解和运用抽象工厂模式,从而提高我们的软件设计能力。

标签:模式,工厂,生产线,抽象,魅力,query,new,public
From: https://blog.51cto.com/u_13616584/6237847

相关文章

  • 面试官:抽象类和接口有什么区别?
    关注“Java后端技术全栈”回复“000”获取大量电子书抽象类和接口有什么区别?这是一道初中级面试中频率相当高的,下面我们就来看看如何应答。初级回答实现:抽象类的子类使用extends来继承;接口必须使用implements来实现接口。构造函数:抽象类可以有构造函数;接口不能有。实现数量:类可......
  • Java设计模式-抽象工厂模式
    简介设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题。其中,抽象工厂模式是一种非常常见的设计模式,它可以帮助我们创建一组相关的对象,而不需要指定具体的实现方式。抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关的......
  • 类特性(抽象类)
    抽象类与抽象方法什么是抽象类:随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。用abstract关键字来修饰一个类,这个类叫做抽象......
  • Java中抽象类和接口的区别?
    什么是抽象类?抽象类是对具体概念的抽象抽象类本质是为了继承只能被public或默认修饰行为层面抽象出来抽象方法抽象类的注意事项抽象类不可以被直接实例化抽象类中可以存在构造方法抽象类可以存在普通方法抽象方法的注意抽象方法必须定义在抽象类中仅声明实现......
  • 抽象工厂模式
    抽象工厂模式:提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类。抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要知道或关心实际生产出的具体产品是什么。这样客户就可以从具体产品中被解耦。///<summary>///下面以绝味鸭脖连锁......
  • 程序员具备的素质魅力
    如果你喜欢上了一个程序员  如果你喜欢上了一个程序员,就不用再害怕电脑中病毒QQ被盗,因为他至少尝试过10款以上杀毒软件,他知道用那款占资源最少防毒效果最好的保护你的电脑。如果你喜欢上了一个程序员,就不用担心他会外遇,因为他工作内容深奥无边,每天沉醉于业务研究之中的他,没有应酬......
  • 互联网+制造业:图扑数字孪生智慧工厂车间生产线
    前言随着信息技术、自动化技术和人工智能等技术的快速发展和应用,智能制造已成为全球制造业发展的主流趋势。智能制造是将智能化、自动化、数字化和网络化等技术手段运用到制造过程中,使生产过程具有高度智能化、自动化和数字化的特点,进而提高生产效率,降低生产成本,优化产品质量,推动环......
  • 互联网+制造业:图扑数字孪生智慧工厂车间生产线
    前言随着信息技术、自动化技术和人工智能等技术的快速发展和应用,智能制造已成为全球制造业发展的主流趋势。智能制造是将智能化、自动化、数字化和网络化等技术手段运用到制造过程中,使生产过程具有高度智能化、自动化和数字化的特点,进而提高生产效率,降低生产成本,优化产品质量,推动环......
  • 为什么匿名内部类可以实例化并实现抽象方法?lambda表达式是简化了匿名内部类的实现过程
    为什么匿名内部类可以实例化并实现抽象方法?在Java中,接口是一种特殊的抽象类型,它只定义了一个或多个抽象方法。接口不能被实例化,但是我们可以使用匿名内部类来实现接口并创建一个具体的对象。匿名内部类是一种没有名字的局部内部类,它可以在定义的同时创建一个实例对象。因此,当我......
  • 抽象类与接口
    接口接口用来描述类应该做什么,而不是指定它们具体应该如何做 主要用于定义规范一个类可以实现多个接口接口中所有方法自动是publicabstract  不必显示声明接口不会有实例字段,字段默认添加 publicstaticfinal修饰 即常量接口不能有初始化块、构造器子类实现接......