计划模式之抽象工厂模式

打印 上一主题 下一主题

主题 987|帖子 987|积分 2961

1.创建抽象产物的接口

  1. // 手机的标准功能
  2. interface Phone {
  3.     void call(); // 必须能打电话
  4. }
  5. // 耳机的标准功能
  6. interface Earphone {
  7.     void playSound(); // 必须能播放声音
  8. }
复制代码
作用


  • 界说产物的 ​同一尺度​(好比所有手机都必须能打电话)
  • 让不同品牌的产物 ​服从雷同规则,好比苹果和华为的手机都必须实现 call() 方法
2.详细产物实现

2.1.苹果牌的电话和耳机
  1. // 苹果手机
  2. class iPhone implements Phone {
  3.     @Override
  4.     public void call() {
  5.         System.out.println("iPhone 打电话");
  6.     }
  7. }
  8. // 苹果耳机
  9. class AirPods implements Earphone {
  10.     @Override
  11.     public void playSound() {
  12.         System.out.println("AirPods 播放音乐");
  13.     }
  14. }
复制代码
作用


  • 实现抽象接口,给出苹果产物的详细功能
  • 好比 iPhone 的 call() 方法打印自己的特色信息
2.2.华为牌的手机和耳机
  1. // 华为手机
  2. class MatePhone implements Phone {
  3.     @Override
  4.     public void call() {
  5.         System.out.println("华为 MatePhone 打电话");
  6.     }
  7. }
  8. // 华为耳机
  9. class FreeBuds implements Earphone {
  10.     @Override
  11.     public void playSound() {
  12.         System.out.println("华为 FreeBuds 播放音乐");
  13.     }
  14. }
复制代码
作用


  • 同上,但实现的是 ​华为品牌 的详细功能
  • 不同品牌的产物 ​实现雷同接口,但细节不同(好比打印的品牌名称)
3.抽象工厂接口

  1. interface TechFactory {
  2.     Phone createPhone();     // 工厂能生产手机
  3.     Earphone createEarphone(); // 工厂能生产耳机
  4. }
复制代码
作用


  • 界说工厂的 ​能力,好比每个工厂必须能生产手机和耳机
  • 确保不同品牌的工厂 ​生产同一套产物​(好比苹果工厂生产手机+耳机,华为工厂也生产手机+耳机)
4.实现抽象工厂 

4.1.苹果工厂
  1. class AppleFactory implements TechFactory {
  2.     @Override
  3.     public Phone createPhone() {
  4.         return new iPhone(); // 生产苹果手机
  5.     }
  6.     @Override
  7.     public Earphone createEarphone() {
  8.         return new AirPods(); // 生产苹果耳机
  9.     }
  10. }
复制代码
作用


  • 实现抽象工厂,详细生产苹果的产物
  • 当调用 createPhone() 时,返回 iPhone 对象
 4.2.华为工厂
  1. class HuaweiFactory implements TechFactory {
  2.     @Override
  3.     public Phone createPhone() {
  4.         return new MatePhone(); // 生产华为手机
  5.     }
  6.     @Override
  7.     public Earphone createEarphone() {
  8.         return new FreeBuds(); // 生产华为耳机
  9.     }
  10. }
复制代码
作用


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

  1. public class Client {
  2.     public static void main(String[] args) {
  3.         // 选择苹果工厂
  4.         TechFactory appleFactory = new AppleFactory();
  5.         Phone myPhone = appleFactory.createPhone();
  6.         Earphone myEarphone = appleFactory.createEarphone();
  7.         myPhone.call();         // 输出:iPhone 打电话
  8.         myEarphone.playSound(); // 输出:AirPods 播放音乐
  9.         // 选择华为工厂
  10.         TechFactory huaweiFactory = new HuaweiFactory();
  11.         Phone hwPhone = huaweiFactory.createPhone();
  12.         Earphone hwEarphone = huaweiFactory.createEarphone();
  13.         hwPhone.call();         // 输出:华为 MatePhone 打电话
  14.         hwEarphone.playSound(); // 输出:华为 FreeBuds 播放音乐
  15.     }
  16. }
复制代码
关键逻辑


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

总结各部门的协作关系


  • 抽象产物​(接口)界说规则 → ​详细产物​(类)实现规则
  • 抽象工厂​(接口)界说能力 → ​详细工厂​(类)实现生产
  • 用户通过选择工厂 → ​获得整套配套产物
扩展性示例(加一个小米工厂)​

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

  • 创建 XiaomiPhone 和 XiaomiEarphone 类(实现 Phone 和 Earphone 接口)
  • 创建 XiaomiFactory 类(实现 TechFactory 接口)
  • 原有代码完全不消修改


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表