抽象工厂模式

  • 1、优缺点
  • 2、使用场景
  • 3、具体实现

抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们具体的类

1、优缺点

优点:
1.具体产品在应用层的代码隔离,无需关系创建的细节
2.将一个系列的产品统一到一起创建
缺点:
1.规定了所有可能被创建的产品集合,产品族中扩展新的产品困难;
2.增加了系统的抽象性和理解难度

2、使用场景

1.客户端(应用层)不依赖与产品类示例如何被创建、实现等细节
2.强调一系列相关的产品对象(数据同一产品族)一起使用创建对象需要大量的重复代码
3.提供一个产品类的库,所有的产品以同样的接口出现,使得客户端不依赖于具体实现

3、具体实现

创建手机工厂

 public interface IpnoneProduct{void sendEamil();void trunOff();void trunOn();void callUp();}

模拟手机厂商小米制造手机

 public class XiaomiPhone implements IpnoneProduct{@Overridevoid sendEamil(){System.out.pritln("小米手机发邮件")}@Overridevoid trunOff(){System.out.pritln("小米手机关机")}@Overridevoid trunOn(){System.out.pritln("小米手机开机")}@Overridevoid callUp(){System.out.pritln("小米手机打电话")}}

模拟手机厂商华为制造手机

 public class HuaweiPhone implements IpnoneProduct{@Overridevoid sendEamil(){System.out.pritln("华为手机发邮件")}@Overridevoid trunOff(){System.out.pritln("华为手机关机")}@Overridevoid trunOn(){System.out.pritln("华为手机开机")}@Overridevoid callUp(){System.out.pritln("华为手机打电话")}}

模拟路由器工厂

public interface IRouterProduct{void start();void shutdown();void openWife();void setting();}

模拟小米路由器

public class XiaomiRouter implements IRouterProduct{@Overridepublic void start(){System.out.println("启动小米路由器");}@Overridepublic void shutdown(){System.out.println("关闭小米路由器");}@Overridepublic void openWife(){System.out.println("打开小米路由器wifi");}@Overridepublic void setting(){System.out.println("设置小米路由器");}
}

模拟华为路由器

public class HuaweiRouter implements IRouterProduct{@Overridepublic void start(){System.out.println("启动华为路由器");}@Overridepublic void shutdown(){System.out.println("关闭华为路由器");}@Overridepublic void openWife(){System.out.println("打开华为路由器wifi");}@Overridepublic void setting(){System.out.println("设置华为路由器");}
}

模拟华为、小米都是一个厂商
他们都有产品手机、路由器

创建抽象产品工厂

public interface IProductFactory{//生产手机IphoneProduct iphoneProduct();//生产路由器IRouterProduct routerProduct();

创建小米工厂

public class XiaomiFactory implements IProductFactory{@Overridepublic IphoneProduct iphoneProduct(){return new XiaomiPhone();}@Overridepublic IRouterProduct routerProduct(){return new XiaomiRouter();}

创建华为工厂

public class HuaweiFactory implements IProductFactory{@Overridepublic IphoneProduct iphoneProduct(){return new HuaweiPhone();}@Overridepublic IRouterProduct routerProduct(){return new HuaweiRouter();}

创建客户端

public class Client{public staic void main(String[] args){System.out.println("=============小米系列产品=========");//小米工厂XiaomiFactory xiaomiFactory = new XiaomiFactory();IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();iphoneProduct.callup();iphoneProduct.sendEamil();IRouterProduct iRouterProduct = xiaomiFactory.routerProduct();iRouterProduct.openWife();System.out.println("=============华为系列产品=========");//小米工厂HuaweiFactory huaweiFactory = new HuaweiFactory();iphoneProduct = huaweiFactory.iphoneProduct();iphoneProduct.callup();iphoneProduct.sendEamil();iRouterProduct = huaweiFactory.routerProduct();iRouterProduct.openWife();}
}

分析类图:

抽象工厂模式(优缺点、使用场景、具体实现)相关推荐

  1. 【设计模式】抽象工厂模式 ( 简介 | 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 )

    文章目录 一.抽象工厂模式简介 二.抽象工厂模式适用场景 三.抽象工厂模式优缺点 四.产品等级结构和产品族 五.抽象工厂模式代码示例 1.冰箱抽象类 2.美的冰箱实现类 3.格力冰箱实现类 4.空调抽 ...

  2. 设计模式-抽象工厂模式的应用场景及Java中对抽象工厂的应用

    1. 什么是抽象工厂模式 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们的类 抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用 ...

  3. JavaScript 前端简单工厂模式、工厂方法模式、抽象工厂模式优缺点及详解 — 设计模式《二》

    工厂模式 前言:就前端 JavaScript 语言来说,可以把简单工厂模式.工厂方法模式.抽象工厂模式归纳为一种即工厂模式: 一. 简单工厂模式 介绍/概述: 简单工厂模式的工厂类一般是使用静态方法, ...

  4. 抽象工厂模式(JAVA反射)

    实例代码(JAVA):模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是 ...

  5. [设计模式] ------ 抽象工厂模式

    抽象工厂模式 抽象工厂模式,就是对工厂方法模式加以改进而已,其实就是用简单工厂模式的套路创建各个工厂,后面和工厂模式就一模一样了. 其实就是相当于将创建哪个工厂的权利再次放给调用端. 调用端在调用的时 ...

  6. 23中设计模式之抽象工厂模式

    抽象工厂模式的定义 定义: 为创建一组相关或互相依赖的对象提供一个接口,而且无须制定它们的具体类 抽象工厂模式的实现 两个产品族, 其类图如下: 抽象产品类代码如下: 产品A的1级和2级类代码如下: ...

  7. 设计模式(6)——抽象工厂模式(Abstract Factory Pattern,创建型)

    1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.抽象工厂模式(Abstract Factory Pattern)属于创建型模式,为创建一组相关或者相互依赖的对象(产品族)提供一个抽象 ...

  8. 关于抽象工厂模式的定义和实现

    前言 大部分摘自:<设计模式之禅> 这本书 抽象工厂模式的定义 为创建一组相关或相互 依赖的对象提供一个接口,而且无须指定它们的具体类. 一个好理解的例子: 讲了女娲造人的故事.人是造出来 ...

  9. 【Python】设计模式(2)--抽象工厂模式

    抽象工厂模式 亦称: Abstract Factory 意图 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类. 问题 假设你正在开发一款家具商店模拟器. 你的代码中 ...

  10. 抽象工厂模式(图画版)

    意图 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类. 问题 假设你正在开发一款家具商店模拟器. 你的代码中包括一些类, 用于表示: 一系列相关产品, 例如 椅子C ...

最新文章

  1. 向深度学习三剑客学习四种科研精神(上)
  2. CBM——IT与业务融合的重要途径
  3. 封装、继承和构造函数
  4. VTK:Utilities之FullScreen
  5. sendBroadcast与sendStickyBroadcast的区别
  6. 怎么查看电脑有没有python_使用python获取电脑的磁盘信息方法
  7. 解决Secure Shell Client(SSH)客户端中文乱码的方法
  8. 网页几种保存类型与html文件格式,HTML 网页文件保存的格式为html或htm (5.0分)
  9. 计算机的DNS地址如何设置,如何设置电脑的DNS地址?
  10. 网页制作语言HTML5的应用
  11. 成功解决 -- flink.shaded.guava18.NumberFormatException: Not a version
  12. 华为云教程(弹性云服务器ECS)
  13. 赛灵思 Xilinx UG1506 - Versal ACAP 开发板系统设计方法指南(中文版) (v2021.2)
  14. TiDB数据库HTAP概述
  15. SQuirrel SQL Client数据库连接工具的配置与使用
  16. 织梦插件-全自动SEO织梦插件
  17. 【随笔】学会拒绝别人,聪明地说不,学会独处
  18. Mysql时间格式转换整理
  19. k8s之存储抽象nfs挂载
  20. 【信息奥赛题解】流感传染(详细题解 C++代码)

热门文章

  1. 微信小程登录功能和获取手机号
  2. (日常)Dell R740 XD 服务器安装GPU显卡记录
  3. svn 分支 合并
  4. LeetCode知识点总结 - 884
  5. php虚线_实现css虚线样式的两种方式:dotted和dashed(实例)
  6. (Python)使用SMTP发送QQ邮件
  7. 不同vlan实现互通
  8. 企业网站如何做好搜索引擎优化
  9. 【惨遭被裁】985毕业,依然过不好这一生
  10. 【电路设计】Altium Designer 20 PCB设计