抽象工厂的定义

  抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

  在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

场景案例

  抽象工厂的应用场景案例说明,如下图所示,我们要实现不同品牌的手机的创建,opp手机对象是一个抽象对象,它的实现类有两个一个是低配版的oppo手机,一个是高配版的oppo手机。vivo手机对象也是一个抽象对象,它的实现类也有低配版vivo手机和高配版vivo手机。然后还需要一个抽象工厂,而抽象工厂的两个子类一个是低配版手机工厂专门负责生产低配置的各个品牌的手机,一个是高配版手机工厂专门用来生产高配置的各个品牌的手机工厂。

代码实现

  使用抽象工厂模式实现不同配置的不同品牌手机的创建操作的流程图如下图所示:

Oppo.java

public interface Oppo {/*** oppo手机拍照功能* @date  2021/11/7 9:48*/void photograph();
}

LowOppo.java

public class LowOppo implements Oppo {@Overridepublic void photograph() {System.out.println("低配版oppo手机拍照中。。。400像素");}
}

HighOppo.java

public class HighOppo implements Oppo {@Overridepublic void photograph() {System.out.println("高配版oppo手机拍照中。。。1200像素");}
}

Vivo.java

public interface Vivo {/*** 拍照功能* @date  2021/11/7 9:46*/void photograph();
}

LowVivo.java

public class LowVivo implements Vivo {@Overridepublic void photograph() {System.out.println("低配版vivo拍照中。。。。像素500");}
}

HighVivo.java

public class HighVivo implements Vivo {@Overridepublic void photograph() {System.out.println("高配版vivo拍照中。。。。像素1000");}
}

IPhoneFactory.java

interface IPhoneFactory {/*** 生产vivo手机* @return  Vivo* @date  2021/11/7 9:51*/Vivo createVivo();/*** 生产oppo手机* @return  Oppo* @date  2021/11/7 9:51*/Oppo createOppo();
}

LowPhoneFactory.java

public class LowPhoneFactory implements IPhoneFactory {@Overridepublic Vivo createVivo() {return new LowVivo();}@Overridepublic Oppo createOppo() {return new LowOppo();}
}

HighPhoneFactory.java

public class HighPhoneFactory implements IPhoneFactory {@Overridepublic Vivo createVivo() {return new HighVivo();}@Overridepublic Oppo createOppo() {return new HighOppo();}
}

Client.java

public class Client {public static void main(String[] args) {// 创建低配版工厂IPhoneFactory lowPhoneFactory = new LowPhoneFactory();Oppo lowOppo = lowPhoneFactory.createOppo();Vivo lowVivo = lowPhoneFactory.createVivo();// 创建高配置工厂IPhoneFactory highPhoneFactory = new HighPhoneFactory();Oppo highOppo = highPhoneFactory.createOppo();Vivo highVivo = highPhoneFactory.createVivo();// 执行各个手机的拍照功能lowOppo.photograph();lowVivo.photograph();highOppo.photograph();highVivo.photograph();}
}

运行结果

低配版oppo手机拍照中。。。400像素
低配版vivo拍照中。。。。像素500
高配版oppo手机拍照中。。。1200像素
高配版vivo拍照中。。。。像素1000

设计模式-手机生产-抽象工厂模式相关推荐

  1. JavaScript 23 种设计模式之 4 抽象工厂模式

    JavaScript 23 种设计模式之 4 抽象工厂模式 概念与特点 结构与实现 应用场景 应用实例 总结 概念与特点 概念: 提供一组相关或相互依赖对象的接口.抽象工厂模式是工厂方法模式的升级版, ...

  2. 设计模式C#描述——抽象工厂模式

    设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...

  3. 设计模式二、抽象工厂模式

    设计模式part2 1.     抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题, ...

  4. Java啤酒生产系统描述_Java描述设计模式(04):抽象工厂模式

    一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 1) 抽象工厂模式:定义了一 ...

  5. java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式

    抽象工厂模式是在工厂方法模式之上的有一次升级,以便能够处理更加复杂的对象创建场景.因此也是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 有朋友可能会想了,工厂方法模式已经是对简单工厂模式的具体 ...

  6. 【设计模式】之抽象工厂模式

    创造性设计模式 创造型模式主要是为了实例化类所用.进一步又分为类创建.对象创建模式. 类创建模式 类创建模式主要基于继承方式进行实例化 对象创建模式 对象创建模式主要基于委托机制进行实例化 Abstr ...

  7. 设计模式3之抽象工厂模式

    抽象工厂模式定义 工厂方法模式中工厂只负责同类产品的生产.比如电视机工厂不应该生产汽车. 然而现实生活中有很多综合型的工厂,比如有些电视工厂不仅生产电视机,还会生产与之配套的机顶盒. 那么抽象工厂模式 ...

  8. 设计模式之笔记--抽象工厂模式(Abstract Factory)

    抽象工厂模式(Abstract Factory) 定义 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 类图 描述 多个抽象产品 ...

  9. 设计模式三之抽象工厂模式

    2019独角兽企业重金招聘Python工程师标准>>> 1.引子 关于抽象模式,个人花了很长的时间去理解它.下面还是以连接数据库为列,比如我们有mysql,oralce,sqlser ...

  10. 设计模式(4)--AbstractFactory(抽象工厂模式)--创建型

    1.模式定义: 抽象工厂是应对产品族概念的,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类 2.模式特点: 抽象工厂模式为创建一组对象提供了一种解决方案.与工厂方法模式相比,抽象工 ...

最新文章

  1. listview异步加载图片
  2. python 复制文件夹内容 并结构一致_Python-移动和覆盖文件和文件夹
  3. 14-Flutter移动电商实战-ADBanner组件的编写
  4. Java Date hashCode()方法与示例
  5. 为什么存取周期大于存取时间_为什么开放存取很重要
  6. R爬虫小白入门:Rvest爬链家网+分析(一)
  7. 基于Velocity的Web开发指南
  8. Google Chrome 浏览器离线安装包下载方法
  9. USBCAN接口卡打开失败收不到数据常见问题分析
  10. 1#组合数学初步——排列与组合之加法原理、乘法原理
  11. ASP.NET 超市管理系统
  12. ExpandableListView中不同条目的位置不同的显示位置
  13. mcake蛋糕预订图片
  14. 爱了爱了!Android平台HTTPS抓包解决方案及问题分析,面试必问
  15. java窗口中添加图片_java初学者 求教怎么在窗口中添加一张图片
  16. 【福利】2020年通信行业研究报告汇总下载(免费)
  17. scratch案例——小猫钓鱼
  18. html格式打开软件打开方式,eps用什么软件打开方式(一文教你eps文件打开流程)...
  19. 网页生成了过多的重定向
  20. 2021年中国智慧菜场行业研究报告 附下载

热门文章

  1. VSCode的VUE项目侧边栏打开资源管理器中的NPM脚本
  2. SSA优化章:SSA优化PID
  3. 批量将图片与白色图进行叠加(仅作记录)
  4. 测试用例以及相关问题
  5. 逆向CrackMe-01写注册机
  6. Runloop与UITableView简单结合
  7. C#(OpenGL MathNet)处理Gauss光斑图像
  8. 【高级持续性威胁追踪】SolarWinds供应链攻击持续跟踪进展
  9. Windows下批量合并文本文件
  10. 为什么网络利用率增大,网络时延会受到消极影响?