设计模式Java实现-抽象工厂模式
✨这里是第七人格的博客✨小七,欢迎您的到来✨
🍅系列专栏:设计模式🍅
✈️本篇内容: 抽象工厂模式✈️
🍱 本篇收录完整代码地址:gitee.com/diqirenge/d… 🍱
楔子
小七刚开始写这个设计模式专栏的时候,当时是想写成小说的形式,也设计了一些爱恨情仇,其中工厂模式是女主角,单例模式是大坏蛋,他通过抽象工厂模式克隆了一堆工厂。今天我们就讲讲抽象工厂。
需求背景
假设有一家电子产品制造公司,它生产两种主要产品:智能手机和智能手表。这些产品都有不同的系列,比如高端系列和经济型系列。每个系列的产品都有其独特的设计和功能。
分析设计
首先这个公司生产两种产品智能手机和智能手表,所以我们可以考虑使用一个抽象工厂接口,用于创建智能手机和智能手表产品。然后针对每个系列,再单独开一个工厂,并且这些工厂都实现于抽象工厂接口。
UML图
根据分析设计,我们可以先画一个简单的UML图,后面通过UML图编码
模块名称
abstractfactory
模块地址
模块描述
抽象工厂模式代码示例
代码实现
1、编写抽象工厂接口,用于创建智能手机和智能手表产品
/**
* 抽象工厂接口,用于创建智能手机和智能手表产品
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2024/06/27
*/
public interface ElectronicsFactory {
/**
* 创建智能手机的方法
*
* @return {@link SmartPhone}
*/
SmartPhone createSmartPhone();
/**
* 创建智能手表的方法
*
* @return {@link SmartWatch}
*/
SmartWatch createSmartWatch();
}
2、分别实现两种系列
/**
* 经济型系列产品工厂的实现类
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2024/06/27
*/
public class BudgetFactory implements ElectronicsFactory {
@Override
public SmartPhone createSmartPhone() { // 实现创建经济型智能手机的方法
return new BudgetSmartPhone();
}
@Override
public SmartWatch createSmartWatch() { // 实现创建经济型智能手表的方法
return new BudgetSmartWatch();
}
}
/**
* 高端系列产品工厂的实现类
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @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、抽象手机和手表的功能接口
/**
* 抽象产品1:智能手机接口
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2024/06/27
*/
public interface SmartPhone {
void display(); // 显示智能手机信息的方法
}
/**
* 抽象产品2:智能手表接口
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2024/06/27
*/
public interface SmartWatch {
void display(); // 显示智能手表信息的方法
}
4、实现手机和手表的功能
/**
* 经济型系列智能手机的实现类
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2024/06/27
*/
public class BudgetSmartPhone implements SmartPhone {
@Override
public void display() { // 实现显示方法,输出经济型智能手机的信息
System.out.println("Displaying Budget SmartPhone");
}
}
/**
* 经济型系列智能手表的实现类
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2024/06/27
*/
public class BudgetSmartWatch implements SmartWatch {
@Override
public void display() { // 实现显示方法,输出经济型智能手表的信息
System.out.println("Displaying Budget SmartWatch");
}
}
/**
* 高端系列智能手机的实现类
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2024/06/27
*/
public class HighEndSmartPhone implements SmartPhone {
@Override
public void display() { // 实现显示方法,输出高端智能手机的信息
System.out.println("Displaying High-End SmartPhone");
}
}
/**
* 高端系列智能手表的实现类
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2024/06/27
*/
public class HighEndSmartWatch implements SmartWatch {
@Override
public void display() { // 实现显示方法,输出高端智能手表的信息
System.out.println("Displaying High-End SmartWatch");
}
}
5、编写测试类
/**
* 抽象工厂模式测试
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @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
实现要点
-
抽象产品接口:
- 在这个模式中,首先定义了抽象产品接口,如
SmartPhone
和SmartWatch
。这些接口规定了产品应该具有的行为,比如这里的display()
方法。
- 在这个模式中,首先定义了抽象产品接口,如
-
具体产品类:
- 然后,我们实现了具体的产品类,如
HighEndSmartPhone
、BudgetSmartPhone
、HighEndSmartWatch
和BudgetSmartWatch
。这些类分别实现了SmartPhone
和SmartWatch
接口,提供了具体的行为实现。
- 然后,我们实现了具体的产品类,如
-
抽象工厂接口:
ElectronicsFactory
是一个抽象工厂接口,它声明了创建一系列相关或相互依赖对象的方法,而不指定它们具体的类。在这个例子中,它声明了createSmartPhone()
和createSmartWatch()
方法。
-
具体工厂类:
HighEndFactory
和BudgetFactory
是实现了ElectronicsFactory
接口的具体工厂类。它们负责创建具体的产品对象,如高端或经济型的智能手机和智能手表。
总结
抽象工厂模式强调的是“产品族”的概念。在这个例子中,高端系列和经济型系列各自构成了一个产品族,每个产品族中包含了一组相关的产品(智能手机和智能手表)。客户端通过选择相应的工厂,可以一次性获取到同一产品族中的所有产品。
转载自:https://juejin.cn/post/7385102654189961256