设计模式之抽象工厂模式

1.创建抽象产品的接口

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

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

作用

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

2.具体产品实现

2.1.苹果牌的电话和耳机

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

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

作用

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

2.2.华为牌的手机和耳机

java 复制代码
// 华为手机
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.抽象工厂接口

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

作用

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

4.实现抽象工厂

4.1.苹果工厂

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

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

作用

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

4.2.华为工厂

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

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

作用

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

5.用户

java 复制代码
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),就能得到 配套的同一品牌产品
  • 完全不用关心 iPhoneMatePhone 的具体实现细节

总结

总结各部分的协作关系

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

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

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

  1. 创建 XiaomiPhoneXiaomiEarphone 类(实现 PhoneEarphone 接口)
  2. 创建 XiaomiFactory 类(实现 TechFactory 接口)
  3. 原有代码完全不用修改
相关推荐
ss27314 小时前
手写MyBatis第32弹-设计模式实战:Builder模式在MyBatis框架中的精妙应用
设计模式·mybatis·建造者模式
汤姆大聪明14 小时前
【软件设计模式】策略模式
设计模式·策略模式
pengzhuofan17 小时前
Java设计模式-模板方法模式
java·设计模式·模板方法模式
使二颗心免于哀伤17 小时前
《设计模式之禅》笔记摘录 - 17.模板方法模式
笔记·设计模式·模板方法模式
AlenLi1 天前
JavaScript - 观察者模式的实现与应用场景
前端·设计模式
pengzhuofan2 天前
Java设计模式-享元模式
java·设计模式·享元模式
希望_睿智2 天前
实战设计模式之解释器模式
c++·设计模式·架构
楚禾Noah2 天前
【设计模式实战】原型模式 + 工厂模式:AI Agent 配置中心
人工智能·设计模式·原型模式
Pure_Eyes2 天前
设计模式详解
设计模式
hai_qin2 天前
三,设计模式-抽象工厂模式
c++·设计模式·抽象工厂模式