设计模式——抽象工厂

介绍

抽象工厂是对简单工厂的抽象。若将简单工厂理解成一维,那么抽象工厂即是多维的。

意图

创建一系列相关对象的接口

解决

接口选择问题

优点

当一个产品族中多个对象一起工作时,能保证始终围绕相同的对象(即 只操作特定的对象)。

缺点

产品族的扩展非常困难,既要在抽象类中新增接口,有需要在实现类添加接口实现类。

使用场景

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();
    }
}
posted @   Geoary  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示