前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式Java实现-抽象工厂模式

设计模式Java实现-抽象工厂模式

原创
作者头像
第七人格
发布2024-06-27 16:54:54
450
发布2024-06-27 16:54:54
举报
文章被收录于专栏:设计模式设计模式

✨这里是第七人格的博客✨小七,欢迎您的到来✨

🍅系列专栏:设计模式🍅

✈️本篇内容: 抽象工厂模式✈️

🍱 本篇收录完整代码地址:https://gitee.com/diqirenge/design-pattern 🍱

楔子

小七刚开始写这个设计模式专栏的时候,当时是想写成小说的形式,也设计了一些爱恨情仇,其中工厂模式是女主角,单例模式是大坏蛋,他通过抽象工厂模式克隆了一堆工厂。今天我们就讲讲抽象工厂。

需求背景

假设有一家电子产品制造公司,它生产两种主要产品:智能手机和智能手表。这些产品都有不同的系列,比如高端系列和经济型系列。每个系列的产品都有其独特的设计和功能。

分析设计

首先这个公司生产两种产品智能手机和智能手表,所以我们可以考虑使用一个抽象工厂接口,用于创建智能手机和智能手表产品。然后针对每个系列,再单独开一个工厂,并且这些工厂都实现于抽象工厂接口。

UML图

根据分析设计,我们可以先画一个简单的UML图,后面通过UML图编码

模块名称

abstractfactory

模块地址

https://gitee.com/diqirenge/design-pattern/tree/master/src/main/java/com/run2code/design/behavioral/abstractfactory

模块描述

抽象工厂模式代码示例

代码实现

1、编写抽象工厂接口,用于创建智能手机和智能手表产品

代码语言:java
复制
/**
 * 抽象工厂接口,用于创建智能手机和智能手表产品
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2024/06/27
 */
public interface ElectronicsFactory {
    /**
     * 创建智能手机的方法
     *
     * @return {@link SmartPhone}
     */
    SmartPhone createSmartPhone();

    /**
     * 创建智能手表的方法
     *
     * @return {@link SmartWatch}
     */
    SmartWatch createSmartWatch();
}

2、分别实现两种系列

代码语言:java
复制
/**
 * 经济型系列产品工厂的实现类
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2024/06/27
 */
public class BudgetFactory implements ElectronicsFactory {
    @Override
    public SmartPhone createSmartPhone() { // 实现创建经济型智能手机的方法
        return new BudgetSmartPhone();
    }

    @Override
    public SmartWatch createSmartWatch() { // 实现创建经济型智能手表的方法
        return new BudgetSmartWatch();
    }
}
代码语言:java
复制
/**
 * 高端系列产品工厂的实现类
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2024/06/27
 */
public class HighEndFactory implements ElectronicsFactory {
    @Override
    public SmartPhone createSmartPhone() { // 实现创建高端智能手机的方法
        return new HighEndSmartPhone();
    }

    @Override
    public SmartWatch createSmartWatch() { // 实现创建高端智能手表的方法
        return new HighEndSmartWatch();
    }
}

3、抽象手机和手表的功能接口

代码语言:java
复制
/**
 * 抽象产品1:智能手机接口
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2024/06/27
 */
public interface SmartPhone {
    void display(); // 显示智能手机信息的方法
}
代码语言:java
复制
/**
 * 抽象产品2:智能手表接口
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2024/06/27
 */
public interface SmartWatch {
    void display(); // 显示智能手表信息的方法
}

4、实现手机和手表的功能

代码语言:java
复制
/**
 * 经济型系列智能手机的实现类
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2024/06/27
 */
public class BudgetSmartPhone implements SmartPhone {
    @Override
    public void display() { // 实现显示方法,输出经济型智能手机的信息
        System.out.println("Displaying Budget SmartPhone");
    }
}
代码语言:java
复制
/**
 * 经济型系列智能手表的实现类
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2024/06/27
 */
public class BudgetSmartWatch implements SmartWatch {
    @Override
    public void display() { // 实现显示方法,输出经济型智能手表的信息
        System.out.println("Displaying Budget SmartWatch");
    }
}
代码语言:java
复制
/**
 * 高端系列智能手机的实现类
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2024/06/27
 */
public class HighEndSmartPhone implements SmartPhone {
    @Override
    public void display() { // 实现显示方法,输出高端智能手机的信息
        System.out.println("Displaying High-End SmartPhone");
    }
}
代码语言:java
复制
/**
 * 高端系列智能手表的实现类
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2024/06/27
 */
public class HighEndSmartWatch implements SmartWatch {
    @Override
    public void display() { // 实现显示方法,输出高端智能手表的信息
        System.out.println("Displaying High-End SmartWatch");
    }
}

5、编写测试类

代码语言:java
复制
/**
 * 抽象工厂模式测试
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2024/06/27
 */
public class AbstractFactoryTest {

    /**
     * 测试调用阿里上传
     */
    @Test
    public void testAbstractFactory() {
        // 创建高端系列产品工厂对象
        ElectronicsFactory highEndFactory = new HighEndFactory();
        // 使用高端工厂创建高端智能手机对象
        SmartPhone highEndPhone = highEndFactory.createSmartPhone();
        // 使用高端工厂创建高端智能手表对象
        SmartWatch highEndWatch = highEndFactory.createSmartWatch();
        // 调用高端智能手机对象的显示方法
        highEndPhone.display(); // 输出 "Displaying High-End SmartPhone"
        // 调用高端智能手表对象的显示方法
        highEndWatch.display(); // 输出 "Displaying High-End SmartWatch"

        // 创建经济型系列产品工厂对象
        ElectronicsFactory budgetFactory = new BudgetFactory();
        // 使用经济型工厂创建经济型智能手机对象
        SmartPhone budgetPhone = budgetFactory.createSmartPhone();
        // 使用经济型工厂创建经济型智能手表对象
        SmartWatch budgetWatch = budgetFactory.createSmartWatch();
        // 调用经济型智能手机对象的显示方法
        budgetPhone.display(); // 输出 "Displaying Budget SmartPhone"
        // 调用经济型智能手表对象的显示方法
        budgetWatch.display(); // 输出 "Displaying Budget SmartWatch"
    }

}

7、测试结果

Displaying High-End SmartPhone Displaying High-End SmartWatch Displaying Budget SmartPhone Displaying Budget SmartWatch

实现要点

  1. 抽象产品接口
    • 在这个模式中,首先定义了抽象产品接口,如SmartPhoneSmartWatch。这些接口规定了产品应该具有的行为,比如这里的display()方法。
  2. 具体产品类
    • 然后,我们实现了具体的产品类,如HighEndSmartPhoneBudgetSmartPhoneHighEndSmartWatchBudgetSmartWatch。这些类分别实现了SmartPhoneSmartWatch接口,提供了具体的行为实现。
  3. 抽象工厂接口
    • ElectronicsFactory是一个抽象工厂接口,它声明了创建一系列相关或相互依赖对象的方法,而不指定它们具体的类。在这个例子中,它声明了createSmartPhone()createSmartWatch()方法。
  4. 具体工厂类
    • HighEndFactoryBudgetFactory是实现了ElectronicsFactory接口的具体工厂类。它们负责创建具体的产品对象,如高端或经济型的智能手机和智能手表。

总结

抽象工厂模式强调的是“产品族”的概念。在这个例子中,高端系列和经济型系列各自构成了一个产品族,每个产品族中包含了一组相关的产品(智能手机和智能手表)。客户端通过选择相应的工厂,可以一次性获取到同一产品族中的所有产品。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 楔子
  • 需求背景
  • 分析设计
  • UML图
  • 模块名称
  • 模块地址
  • 模块描述
  • 代码实现
  • 实现要点
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档