1.创建抽象产品的接口
// 手机的标准功能
interface Phone {void call(); // 必须能打电话
}// 耳机的标准功能
interface Earphone {void playSound(); // 必须能播放声音
}
作用:
- 定义产品的 统一标准(比如所有手机都必须能打电话)
- 让不同品牌的产品 遵守相同规则,比如苹果和华为的手机都必须实现
call()
方法
2.具体产品实现
2.1.苹果牌的电话和耳机
// 苹果手机
class iPhone implements Phone {@Overridepublic void call() {System.out.println("iPhone 打电话");}
}// 苹果耳机
class AirPods implements Earphone {@Overridepublic void playSound() {System.out.println("AirPods 播放音乐");}
}
作用:
- 实现抽象接口,给出苹果产品的具体功能
- 比如
iPhone
的call()
方法打印自己的特色信息
2.2.华为牌的手机和耳机
// 华为手机
class MatePhone implements Phone {@Overridepublic void call() {System.out.println("华为 MatePhone 打电话");}
}// 华为耳机
class FreeBuds implements Earphone {@Overridepublic void playSound() {System.out.println("华为 FreeBuds 播放音乐");}
}
作用:
- 同上,但实现的是 华为品牌 的具体功能
- 不同品牌的产品 实现相同接口,但细节不同(比如打印的品牌名称)
3.抽象工厂接口
interface TechFactory {Phone createPhone(); // 工厂能生产手机Earphone createEarphone(); // 工厂能生产耳机
}
作用:
- 定义工厂的 能力,比如每个工厂必须能生产手机和耳机
- 确保不同品牌的工厂 生产同一套产品(比如苹果工厂生产手机+耳机,华为工厂也生产手机+耳机)
4.实现抽象工厂
4.1.苹果工厂
class AppleFactory implements TechFactory {@Overridepublic Phone createPhone() {return new iPhone(); // 生产苹果手机}@Overridepublic Earphone createEarphone() {return new AirPods(); // 生产苹果耳机}
}
作用:
- 实现抽象工厂,具体生产苹果的产品
- 当调用
createPhone()
时,返回iPhone
对象
4.2.华为工厂
class HuaweiFactory implements TechFactory {@Overridepublic Phone createPhone() {return new MatePhone(); // 生产华为手机}@Overridepublic 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
的具体实现细节
总结
总结各部分的协作关系
- 抽象产品(接口)定义规则 → 具体产品(类)实现规则
- 抽象工厂(接口)定义能力 → 具体工厂(类)实现生产
- 用户通过选择工厂 → 获得整套配套产品
扩展性示例(加一个小米工厂)
如果未来要新增 小米品牌,只需:
- 创建
XiaomiPhone
和XiaomiEarphone
类(实现Phone
和Earphone
接口) - 创建
XiaomiFactory
类(实现TechFactory
接口) - 原有代码完全不用修改