浅谈抽象工厂模式

简介: 浅谈抽象工厂模式

🚗抽象工厂模式

定义

抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

角色

抽象产品

具体产品

抽象工厂

具体工厂

模式类图

🍓举个栗子

小米工厂生产小米手机和小米电脑

Vivo工厂生产Vivo手机和Vivo电脑

我们先假设下我们用工厂方法模式写的话,类图是什么呢?

🎈🎈🎈🎈🎈🎈🎈

那我们用工厂方法又是什么样的类图呢?

🎈🎈🎈🎈🎈🎈🎈

🎈:我们可以很明显的看出这个类比上面工厂方法的类少,这个也算是一个优点了

代码

🥛先来回顾下问题:

小米工厂生产小米手机和小米电脑

Vivo工厂生产Vivo手机和Vivo电脑

【Tpis】: 可以着重看下类图

编写顺序

Mobile > MiMobile > VivoMobile

Computer > MiComputer > VivoComputer

Factory > MiFactory > VivoFactory

Mobile.java

public interface Mobile {
    //打电话
    void call();
}

MiMobile.java

public class MiMobile implements Mobile {
    @Override
    public void call() {
        System.out.println("我的小米");
    }
}

VivoMobile.java

public class VivoMobile implements Mobile {
    @Override
    public void call() {
        System.out.println("我的vivo");
    }
}

Computer.java

public interface Computer {
    //工作
    void work();
}

MiComputer.java

public class MiComputer implements Computer {
    @Override
    public void work() {
        System.out.println("小米电脑");
    }
}

VivoComputer.java

public class VivoComputer implements Computer {
    @Override
    public void work() {
        System.out.println("vivo电脑");
    }
}

Factory.java

public interface Factory {
    Mobile getMobile();
    Computer getComputer();
}

MiFactory.java

public class MiFactory implements Factory {
    @Override
    public Mobile getMobile() {
        return new MiMobile();
    }
    @Override
    public Computer getComputer() {
        return new MiComputer();
    }
}

VivoFactory.java

public class VivoFactory implements Factory {
    @Override
    public Mobile getMobile() {
        return new VivoMobile();
    }
    @Override
    public Computer getComputer() {
        return new VivoComputer();
    }
}

Client.java

public class Client {
    private static void useProduct(Factory factory){
        factory.getComputer().work();
        factory.getMobile().call();
    }
    public static void main(String[] args) {
        useProduct(new VivoFactory());
        System.out.println("==============");
        useProduct(new MiFactory());
    }
}

结果

🧡模式优点

仍然有简单工厂和工厂方法的优点

抽象工厂把工厂类的数量减少了,无论有多少个产品等级,工厂就一套

💢模式缺点

当产品等级发生变化时,都要引起所有以前工厂代码的修改,比如我们要添加个 生产相机 ,那么Factory里面的代码就得改,那么所有的具体工厂都得改,违反了开闭原则

😋模式适用环境

当产品等级比较固定时,可以考虑用抽象工厂

若产品等级经常变化,则不建议使用抽象工厂


目录
打赏
0
0
0
0
0
分享
相关文章
阿里云服务器系统盘和数据盘云盘存储收费标准报价详单
阿里云服务器系统盘或数据盘可选高效云盘、SSD云盘、ESSD云盘或ESSD AutoPL,系统盘40G高效云盘一个月价格40元,按量价格是0.0196元/40GiB/小时,SSD云盘40G是40元/月,ESSD云盘PL0价格是一个月0.5元每GB
3561 0
阿里云服务器系统盘和数据盘云盘存储收费标准报价详单
OpenAI发布Sora,引领多模态大模型再突破
OpenAI发布Sora,引领多模态大模型再突破
370 4
OpenAI发布Sora,引领多模态大模型再突破
2024年知识管理软件评测:哪款工具最适合初创团队提升工作效率?
本文评测了8款适合初创企业的知识管理软件,包括板栗看板、Notion、Confluence、Evernote Business、Slack、Miro、Trello和Airtable。这些工具不仅支持高效的团队协作,还具备强大的信息管理功能,帮助企业在快速成长的过程中保持信息的有序和共享。初创企业可根据自身需求选择最适合的工具,提升团队效率。
 2024年知识管理软件评测:哪款工具最适合初创团队提升工作效率?
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
164 2
云原生数据仓库产品使用合集之阿里云云原生数据仓库AnalyticDB PostgreSQL版的重分布时间主要取决的是什么
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
10月前
网站维护更新简易单页404页html代码
一个简约风格的单页html页面,可用于网站维护中或更新网站时挂个首页使用,如果不喜欢现在的颜色请F12修改设置既可。
184 1
网站维护更新简易单页404页html代码
技术分享 | 云原生算力时代-倚天实例技术架构与最佳实践解析
阿里云倚天实例基于平头哥半导体自研倚天710云原生处理器,倚天710使用ARMv9架构,采用业界领先的工艺设计,单芯片容纳高达600亿晶体管,内含128核CPU核心,主频2.75GHz,能同时兼顾性能和功耗。同时得益于阿里云自研的CIPU处理器以及飞天云计算操作系统,倚天实例实现了芯片、计算架构及操作系统的协同优化,显著提升了算力性价比。目前阿里云倚天实例已经在视频编解码、科学计算、电商等领域得到了广泛的应用。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问