当前位置: 首页 > news >正文

抽象工厂设计模式

1.问题背景:

现在有两个产品(Product)分别是手机壳(PhoneCase)和耳机(EarPhone),但是他们会来自于各个生产厂商,比如说Apple和Android等等

那么至少会有四个产品,分别是安卓手机壳,安卓耳机,苹果手机壳,苹果耳机。

但是安卓手机壳和安卓耳机都是安卓体系,所以想到采用工厂方式,一个工厂一起就把这两个类创建了

那用户至少会有两个体系,安卓和苹果,如果说用户说安卓体系就用安卓的工厂去创建,苹果体系就用苹果的工厂去创建

那么问题来了,两个体系倒还好,那万一后面还多了,鸿蒙系统、linux、mac之类的系统,肯定是不可能通过if、 else if去选择创建产品的工厂

迎面而来的解决方法就是通过抽象工厂,这也就是抽象工厂设计模式

2.介绍抽象工厂

一个体系下有两个产品,这两个产品我们可以用工厂一次创建,关键问题是体系太多不好定义,所以我们可以抽象一个工厂,然后不同体系基于该工厂去实现,去定义自己的创建产品的逻辑

但是这样又有一个问题,工厂生产出来的类至少有两个,所以我们需要一个Client类,来接受工厂生成出来的产品类(手机壳和耳机),并且管理每个类的具体方法

3.手搓代码环节

3.1项目结构

3.2product

耳机的通用方法

package product;public interface EarPhone {
public void useEarphone();
}

手机壳的通用方法

package product;public interface PhoneCase {
public void protectPhone();
}

苹果耳机的具体实现

package product;public class AppleEarphone implements EarPhone{
@Override
public void useEarphone() {
System.out.println("使用苹果耳机");
}
}

苹果手机壳的具体实现

package product;public class ApplePhoneCase implements PhoneCase{
@Override
public void protectPhone() {
System.out.println("保护苹果手机");
}
}

安卓耳机的具体实现

package product;public class AndroidEarphone implements EarPhone{
@Override
public void useEarphone() {
System.out.println("使用安卓耳机");
}
}

安卓手机壳的具体实现

package product;public class AndroidPhoneCase implements PhoneCase {
@Override
public void protectPhone() {
System.out.println("保护安卓手机");
}
}

3.3sysfactory

通用工厂接口,因为每个工厂都需要创建对应的耳机类和手机壳类

package sysfactory;import product.EarPhone;
import product.PhoneCase;public interface AccessoryFactory {
public PhoneCase createPhoneCase();
public EarPhone createEarphone();
}

苹果工厂实现

package sysfactory;import product.AppleEarphone;
import product.ApplePhoneCase;
import product.EarPhone;
import product.PhoneCase;public class AppleAccessoryFactory implements AccessoryFactory{
@Override
public PhoneCase createPhoneCase() {
return new ApplePhoneCase();
}
@Override
public EarPhone createEarphone() {
return new AppleEarphone();
}
}

安卓工厂实现

package sysfactory;import product.AndroidEarphone;
import product.AndroidPhoneCase;
import product.EarPhone;
import product.PhoneCase;public class AndroidAccessoryFactory implements AccessoryFactory {
@Override
public PhoneCase createPhoneCase() {
return new AndroidPhoneCase();
}
@Override
public EarPhone createEarphone() {
return new AndroidEarphone();
}
}

3.4client

package client;import product.EarPhone;
import product.PhoneCase;
import sysfactory.AccessoryFactory;public class Client {
private final PhoneCase phoneCase;
private final EarPhone earphone;public Client(AccessoryFactory factory) {
this.phoneCase = factory.createPhoneCase();
this.earphone = factory.createEarphone();
}public void useAccessories() {
phoneCase.protectPhone();
earphone.useEarphone();
}
}

3.5主类

package app;import client.Client;
import sysfactory.AccessoryFactory;
import sysfactory.AndroidAccessoryFactory;
import sysfactory.AppleAccessoryFactory;public class Main {
public static void main(String[] args) {
AccessoryFactory appleFactory = new AppleAccessoryFactory();
Client appleClient = new Client(appleFactory);
appleClient.useAccessories();AccessoryFactory androidFactory = new AndroidAccessoryFactory();
Client androidClient = new Client(androidFactory);
androidClient.useAccessories();
Client appleClient1 = new Client(new AppleAccessoryFactory());
appleClient1.useAccessories();}
}

4.思考

4.1贴一张Ai帮我画的图

ChatGPT Image 2025年6月21日 16_47_14.png

相关文章:

  • 从C++编程入手设计模式——责任链模式
  • 大模型应用:如何使用Langchain+Qwen部署一套Rag检索系统
  • 【机器学习四大核心任务类型详解】分类、回归、聚类、降维都是什么?
  • OpenGL ES 中的材质
  • 分布式ID生成方式及优缺点详解
  • [特殊字符] AIGC工具深度实战:GPT与通义灵码如何彻底重构企业开发流程
  • 电脑商城--购物车
  • Camera Sensor接口协议全解析(三):移动霸主——MIPI CSI-2架构拆解
  • 【数据结构】_二叉树部分特征统计
  • rom定制系列------红米note11 5G版 MTK芯片强解bl锁修复bug 官方系统 面具root批量线刷版
  • React 新钩子useImperativeHandle
  • 华为OD机考-素数伴侣-逻辑分析(JAVA 2025B卷)
  • AWS 使用图形化界面创建 EKS 集群(零基础教程)
  • jenkins对接、jenkins-rest
  • 单例模式-Python示例
  • 如何仅用AI开发完整的小程序<4>—小程序页面创建与删除
  • 【Linux】进程间多种通信方式对比
  • Flink Sink函数深度解析:从原理到实践的全流程探索
  • vscode+react+ESLint解决不引入组件,vscode不会报错的问题
  • 【设计模式】策略模式 在java中的应用
  • 2016年两学一做教育网站/如何加入百度推广
  • 公安网站制作/百度站长工具排名
  • 江西省赣州市天气预报/c盘优化大师
  • 网络推广培训学校哪里好/来宾网站seo
  • 长沙做搜索引擎的公司/徐州seo外包公司
  • 英文响应式网站建设/seo最新教程