设计模式——抽象工厂
介绍
抽象工厂是对简单工厂的抽象。若将简单工厂理解成一维
,那么抽象工厂即是多维
的。
意图
创建一系列相关对象的接口
解决
接口选择问题
优点
当一个产品族中多个对象一起工作时,能保证始终围绕相同的对象(即 只操作特定的对象)。
缺点
产品族的扩展非常困难,既要在抽象类中新增接口,有需要在实现类添加接口实现类。
使用场景
QQ皮肤
模型图
简单工厂:
抽象工厂:
UML
示例
cpu接口:GenerateCPU.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public interface GenerateCPU {
void productCPU();
}
HWCPU.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public class HWCPU implements GenerateCPU {
@Override
public void productCPU() {
System.out.println("华为海思芯片");
}
}
GTCPU.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public class GTCPU implements GenerateCPU {
@Override
public void productCPU() {
System.out.println("高通芯片");
}
}
AppleCPU.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public class AppleCPU implements GenerateCPU{
@Override
public void productCPU() {
System.out.println("苹果公司自己芯片");
}
}
屏幕接口:GenerateScreen.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public interface GenerateScreen {
void productScreen();
}
LGScreen.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public class LGScreen implements GenerateScreen {
@Override
public void productScreen() {
System.out.println("LG生产屏幕");
}
}
SamsungScreen.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public class SamsungScreen implements GenerateScreen {
@Override
public void productScreen() {
System.out.println("三星公司OLED屏幕");
}
}
JDIScreen.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public class JDIScreen implements GenerateScreen {
@Override
public void productScreen() {
System.out.println("日本显示公司生产屏幕");
}
}
生产手机抽象类:GeneratePhone.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public abstract class GeneratePhone {
abstract void useCPU();
abstract void useSreen();
}
华为手机工厂:HUAWEIPhoneFactory.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public class HUAWEIPhoneFactory extends GeneratePhone {
@Override
void useCPU() {
new HWCPU().productCPU();
}
@Override
void useSreen() {
new JDIScreen().productScreen();
}
}
苹果手机工厂:ApplePhoneFactory.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public class ApplePhoneFactory extends GeneratePhone {
@Override
void useCPU() {
new AppleCPU().productCPU();
}
@Override
void useSreen() {
new SamsungScreen().productScreen();
}
}
客户端生成手机:AbstractFactory.java
package cn.geoaryblog.design.cretedg.abstractfactory;
public class AbstractFactory {
public static void main(String[] args) {
GeneratePhone hwphone = new HUAWEIPhoneFactory();
hwphone.useCPU();
hwphone.useSreen();
GeneratePhone applePhone = new ApplePhoneFactory();
applePhone.useCPU();
applePhone.useSreen();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具