工厂,顾名思义,就是生产东西的地方。在代码开发中生产的“东西”指的是对象,所以通俗来讲工厂模式就是生产对象。使用工厂模式可以把对象的具体创建和使用分开,使用者不必了解对象是如何创建的,只管使用。

工厂模式按照抽象程度的不同具体有三类,分别是简单工厂模式、工厂方法模式和抽象工厂模式。

简单工厂模式:
简单工厂模式主要有三个角色:
抽象产品:定义具体产品类的公共接口
具体产品:抽象产品的具体实现
工厂类:返回具体产品实例,返回实例的方法一般都是静态方法。

简单工厂模式中只有一个工厂,所有产品的创建都在一个工厂中完成。简单工厂模式中可以使用反射来创建实例。

工厂方法模式:
工厂方法模式与简单工厂模式相比多了一个抽象工厂角色:
抽象产品:定义具体产品类的公共接口
具体产品:抽象产品的具体实现
抽象工厂:有个抽象方法返回抽象产品类型的对象
具体工厂:返回具体产品实例

工厂方法模式符合开放关闭原则和单一职责原则,但是每增加一个新产品时就需要增加对应的工厂类,使系统类的个数成对增加,加大了开销。

抽象工厂模式:
抽象工厂模式与工厂方法模式相比抽象工厂模式中每一个工厂可以创建多个实例,也就是抽象工厂角色中有多个抽象方法。

抽象产品:定义具体产品类的公共接口
具体产品:抽象产品的具体实现
抽象工厂:有多个抽象方法返回对应的抽象产品类型对象
具体工厂:返回具体产品实例

Android中的工厂模式相关推荐

  1. Android中Activity启动模式

    Android中Activity启动模式一共是四种,这里我写一下我对其的理解: 1.standard(默认) 2.singleTop,如果某个Activity设置了该属性,且当前Activity就是这 ...

  2. PHP 中使用工厂模式

    >>PHP实现单件模式的几种方式 工厂类是指包含一个专门用来创建其他对象的方法的类,工厂类在多态性编程实践中是至关重要的,它允许动态的替换类,修改配置,通常会使应用程序更加 灵活,熟练掌握 ...

  3. 第09课:生活中的工厂模式——你要拿铁还是摩卡

    用程序来模拟生活 从剧情中思考工厂模式 工厂模式的模型抽象 类图 模型说明 简单工厂的优点 简单工厂的缺点 模型的拓展应用 应用场景 [拓展]工厂三姐妹 简单工厂模式 工厂方法模式 抽象工厂模式 进一 ...

  4. android中的recovery模式

    这里使用基于freescale的imx_r9.2 patch的android源码分析. android中的recovery模式,作为android的开发者或者用户都应该清楚和了解.android利用r ...

  5. Android中的代理模式

    Android中的代理模式 1. 什么是代理 比如我们生活中的找出租屋,需要去找中介进行寻找挑选.而这里的中介就是代理.列子中看出代理特点如下1. 租客跟中介要做成的最终目的是一致的就是租到房子(目标 ...

  6. java中的工厂_java中的工厂模式

    1.工厂模式 java中的工厂模式,个人理解是:要想制作一个汽车,则必须有轮子,发动机,座椅等. 1.创建一个接口,并且使得轮子,发动机,座椅三个实现类实现这个接口. 2.创建一个工厂,生成基于给定信 ...

  7. android常用的工厂模式,Android的设计模式-简单工厂模式

    前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中:java 1.定义 定义一个用于建立对象的接口,让子类决定实例化哪一个类.设计模式 2.介绍 简单工厂模式属于建立型模式. 简单工厂模 ...

  8. 【设计模式与Android】抽象工厂模式——嵌合体克隆工厂

    什么是抽象工厂模式 所谓抽象工厂模式,就是为创建一组相关或者是互相依赖的对象提供一个接口,而不需要指定它们的具体类的设计模式.抽象工厂模式适用于一个对象族有相同的约束的情况,用不抽象的语言解释就是国内 ...

  9. Android开发之工厂模式初探

    工厂模式(Factory)是比较常见的一种模式我觉得也是一种非常容易理解的一种模式,举个简单的例子吧,我们小时候经常考试,每次最害怕的就是爸妈问考试试卷的分数,不同的分数我们的心情也是不一样的.那么我 ...

  10. java中的工厂模式

    一.工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式的几种形态: (1)简单工厂(Simple Factor ...

最新文章

  1. NLP被英语统治?打破成见,英语不应是「自然语言」同义词
  2. wind mysql日志_Windows下的Mysql日志操作
  3. mysql delete exists用法_自学MySQL第五天
  4. Linux的实际操作:用户管理(用户组的管理groupadd useradd usermod)
  5. 标准C时间与日期函数、内存函数
  6. 本草纲目pdf彩图版下载_本草纲目彩色插图完整版(本草纲目pdf) PDF
  7. PHP海补知识(6)-- nl2br/ucfirst/ucwords
  8. linux使用set给位置变量赋值,Linux命令(6/28)——declare/typeset命令
  9. maven-default-http-blocker
  10. poi对word读取(文本和图片)、修改、保存操作及word转换为PDF
  11. Bootstrap系列之巨幕(Jumbotron)
  12. 红外对管应该如何选择比较好
  13. 【2018慢性病与信息大会】曲晓杰:智能健康养老政策解读
  14. 单核处理器、多核处理器、多处理器与多线程编程
  15. 记录华为游戏SDK,ResourceLoaderUtil.getStringId() 空指针问题
  16. 解决错误Annotation processors must be explicitly declared now
  17. 每日一笑20200529
  18. 罗斯蒙特流量计电极的维护
  19. 通往全栈工程师的捷径 —— React
  20. 虚拟卡 | 玩转Drop shipping速卖通采购用什么虚拟卡?

热门文章

  1. Ansible9:变量之Fact
  2. 打开dashboard报错:xcelsius已经停止工作
  3. 测试用例以及相关问题
  4. 给大家分享一下我的数字化转型研究资料
  5. 不做自了汉,大家好才是真的好
  6. PDF文件有密码怎么办?
  7. dhcp服务器怎么设置虚拟网段,配置DHCP服务器不同网段分配ip
  8. Vulhub-DC-8靶场实战攻略
  9. 移动硬盘内(或U盘)安装win10+kali(或其他linux)双系统,实现移动化办公
  10. encountered an improper argument解决方案