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

设计模式之抽象工厂模式

1.创建抽象产品的接口

// 手机的标准功能
interface Phone {
    void call(); // 必须能打电话
}

// 耳机的标准功能
interface Earphone {
    void playSound(); // 必须能播放声音
}

作用

  • 定义产品的 ​统一标准​(比如所有手机都必须能打电话)
  • 让不同品牌的产品 ​遵守相同规则,比如苹果和华为的手机都必须实现 call() 方法

2.具体产品实现

2.1.苹果牌的电话和耳机

// 苹果手机
class iPhone implements Phone {
    @Override
    public void call() {
        System.out.println("iPhone 打电话");
    }
}

// 苹果耳机
class AirPods implements Earphone {
    @Override
    public void playSound() {
        System.out.println("AirPods 播放音乐");
    }
}

作用

  • 实现抽象接口,给出苹果产品的具体功能
  • 比如 iPhone 的 call() 方法打印自己的特色信息

2.2.华为牌的手机和耳机

// 华为手机
class MatePhone implements Phone {
    @Override
    public void call() {
        System.out.println("华为 MatePhone 打电话");
    }
}

// 华为耳机
class FreeBuds implements Earphone {
    @Override
    public void playSound() {
        System.out.println("华为 FreeBuds 播放音乐");
    }
}

作用

  • 同上,但实现的是 ​华为品牌 的具体功能
  • 不同品牌的产品 ​实现相同接口,但细节不同(比如打印的品牌名称)

3.抽象工厂接口

interface TechFactory {
    Phone createPhone();     // 工厂能生产手机
    Earphone createEarphone(); // 工厂能生产耳机
}

作用

  • 定义工厂的 ​能力,比如每个工厂必须能生产手机和耳机
  • 确保不同品牌的工厂 ​生产同一套产品​(比如苹果工厂生产手机+耳机,华为工厂也生产手机+耳机)

4.实现抽象工厂 

4.1.苹果工厂

class AppleFactory implements TechFactory {
    @Override
    public Phone createPhone() {
        return new iPhone(); // 生产苹果手机
    }

    @Override
    public Earphone createEarphone() {
        return new AirPods(); // 生产苹果耳机
    }
}

作用

  • 实现抽象工厂,具体生产苹果的产品
  • 当调用 createPhone() 时,返回 iPhone 对象

 4.2.华为工厂

class HuaweiFactory implements TechFactory {
    @Override
    public Phone createPhone() {
        return new MatePhone(); // 生产华为手机
    }

    @Override
    public Earphone createEarphone() {
        return new FreeBuds(); // 生产华为耳机
    }
}

作用

  • 同上,但生产的是华为的产品
  • 当调用 createEarphone() 时,返回 FreeBuds 对象

5.用户

public class Client {
    public static void main(String[] args) {
        // 选择苹果工厂
        TechFactory appleFactory = new AppleFactory();
        Phone myPhone = appleFactory.createPhone();
        Earphone myEarphone = appleFactory.createEarphone();
        myPhone.call();         // 输出:iPhone 打电话
        myEarphone.playSound(); // 输出:AirPods 播放音乐

        // 选择华为工厂
        TechFactory huaweiFactory = new HuaweiFactory();
        Phone hwPhone = huaweiFactory.createPhone();
        Earphone hwEarphone = huaweiFactory.createEarphone();
        hwPhone.call();         // 输出:华为 MatePhone 打电话
        hwEarphone.playSound(); // 输出:华为 FreeBuds 播放音乐
    }
}

关键逻辑

  • 用户只需 ​选择一个工厂​(比如 AppleFactory),就能得到 ​配套的同一品牌产品
  • 完全不用关心 iPhone 或 MatePhone 的具体实现细节

总结 

总结各部分的协作关系

  1. 抽象产品​(接口)定义规则 → ​具体产品​(类)实现规则
  2. 抽象工厂​(接口)定义能力 → ​具体工厂​(类)实现生产
  3. 用户通过选择工厂 → ​获得整套配套产品

扩展性示例(加一个小米工厂)​

如果未来要新增 ​小米品牌,只需:

  1. 创建 XiaomiPhone 和 XiaomiEarphone 类(实现 Phone 和 Earphone 接口)
  2. 创建 XiaomiFactory 类(实现 TechFactory 接口)
  3. 原有代码完全不用修改

相关文章:

  • element plus组件Carousel组件3个卡片平铺样式改造
  • docker nginx
  • A - 整数的简单问题/A - A Simple Problem with Integers
  • 《算法笔记》8.2小节——搜索专题->广度优先搜索(BFS)问题 E: 【宽搜入门】巧妙取量
  • 基于 Prometheus + Grafana 监控微服务和数据库
  • 职业教育五金建设改革解析
  • C# 一文读懂委托与事件
  • Web Component 教程(二):如何有效管理和使用自定义属性
  • ✎ 一次有趣的经历
  • Cross-Silo Prototypical Calibration for Federated Learning with Non-IID Data
  • 【操作系统安全】任务6:Linux 系统文件与文件系统安全 学习指南
  • 【项目合集】基于ESP32的智能化妆柜
  • Linux进程信号(上)
  • Python第五章03:函数返回值和None类型
  • 网络编程知识预备阶段
  • 东隆科技携手PRIMES成立中国校准实验室,开启激光诊断高精度新时代
  • 【免费】2004-2017年各地级市实际利用外资数据
  • Grokking System Design 系统设计面试问题
  • 从零开始实现一个HTML5飞机大战游戏
  • java 中散列表(Hash Table)和散列集(Hash Set)是基于哈希算法实现的两种不同的数据结构
  • 塞尔维亚总统因突发健康问题,中断对美国的正式访问并回国
  • 49:49白热化,美参议院对新关税政策产生巨大分歧
  • 马上评|扩大高速免费救援范围,打消出行后顾之忧
  • 美国务院宣布新一轮与伊朗相关的制裁
  • 空调+零食助顶级赛马备战,上海环球马术冠军赛将焕新登场
  • 亚马逊拟为商品标注“关税成本”,特朗普致电贝索斯讨说法