ITPub博客

首页 > 数据库 > 数据库开发技术 > 今日代码大赏 | 抽象工厂模式

今日代码大赏 | 抽象工厂模式

原创 数据库开发技术 作者:程序员鱼皮 时间:2024-05-01 21:43:32 0 删除 编辑

工厂模式根据其实现方式的不同,可以分为简单工厂模式、工厂方法模式和抽象工厂模式。

前几天我们分享了用 Java 实现工厂方法模式,有需要了解的同学可点击下方标题直接跳转哦!

今日代码大赏 | 工厂方法模式

今天我们来了解下抽象工厂模式。抽象工厂模式是一个高级的结构型模式,它结合了多个工厂方法,提供了一个统一的接口来创建一系列相关或依赖的对象。这种模式常用于当需要生产相互关联或相互依赖的产品族时。

抽象工厂模式提供一个接口,用于创建一系列相关或相互依赖的对象,而不需要指定它们的具体类。它主要用于解耦系统和对象的创建过程,使得系统更容易扩展。

下面是使用Java实现抽象工厂模式的示例代码:

// 产品接口
interface Product { 
    void use();
}
// 具体产品类A
class ConcreteProductA implements Product {
    @Override
    public void use() {
        System.out.println("使用产品A");
    }
}
// 具体产品类B
class ConcreteProductB implements Product {
    @Override
    public void use() {
        System.out.println("使用产品B");
    }
}
// 抽象工厂接口
interface Factory {
    Product createProduct();
}
// 具体工厂类A
class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}
// 具体工厂类B
class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}
// 客户端代码
public class Client {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Factory factoryB = new ConcreteFactoryB();
        
        Product productA = factoryA.createProduct();
        productA.use();
        
        Product productB = factoryB.createProduct();
        productB.use();
    }
}

在上述代码中,我们首先定义了两个产品接口 Product 和相应的具体产品类 ConcreteProductA 和 ConcreteProductB。然后,我们定义了一个抽象工厂接口 Factory,以及两个具体工厂类 ConcreteFactoryA 和 ConcreteFactoryB,它们分别创建相应的产品对象。客户端代码通过具体工厂类来获取产品对象,并调用产品的 use 方法。

抽象工厂模式的优点
1)解耦:将具体的创建逻辑与使用逻辑分离,提高系统的灵活性。
2)扩展性:增加新的产品族变得容易,只需提供新的具体工厂即可。

抽象工厂模式的缺点
产品族固定:一旦产品族确定,新增一个产品族会比较困难。

今天的代码大赏就到这里。希望通过这篇文章,你能够对抽象工厂模式有一个更深入的理解。

完整代码片段来源于代码小抄,欢迎点击进入小程序阅读!

在线访问:https://www.codecopy.cn/post/msf0ht

在代码小抄可以看到更多优质代码,也欢迎大家积极分享,可能会获得我们官方的小礼品 🎁~

往期推荐

代码小抄插件上线!一键分享代码

今日代码大赏 | Java 序列化

今日代码大赏 | 工厂方法模式

今日代码大赏 | Git 常用命令

今日代码大赏 | Spring Boot 健康检查接口

原文作者:程序员鱼皮;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-12-20

  • 博文量
    330
  • 访问量
    151644