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

public class Factory {public  static Student_test  creator(String rank){if(rank.equals("优秀")){return  new Student_Laugh();}else{return  new Student_Cry();}}
}

在这里我们建立了一个工厂类根据该学生得到的不同成绩,生成该学生不同情绪的反应类。很多人觉得我直接根据值new Student()类不就好了,是的啊这样的逻辑没有问题,但是如果创建Student实例时所做的初始化工作不是象赋值这样简单的事,我们都知道我们苦逼的分数都是由我们老师打得,是经历了一个很长的阅卷过程,转化起来可能是很长一段代码,如果也写入构造函数中,那我们的代码很难看了(就需要Refactor重整)。
      为什么说代码很难看,大部分人刚开始可能没有这种感觉,我刚开始也是这么觉得。但是我们分析一下,初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。
     在本例中,首先,我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Student的构造函数中分离出去。
      在构建工厂类的时候呢,除了上述的工厂类Factory,还有抽象类Student

public abstract class Student {}

Student的子类laugh,cry类继承抽象类Student共同组成。

下面我们再来介绍一下抽象工厂模型,这两个模式区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得复杂了,如上面工厂方法中是创建一个对象Student_test,如果学生还有普通不考试的状态Student_normal,这怎么办呢!我们继续上面的比方,一个家比喻成一个工厂,他们家有两个小孩,两个小孩还是都要去考试吧,都会有考试成绩吧,但虽然是一个爸妈生的,对于分数的表现也是不一样的吧。按照上述场景,我们在写一个抽象工厂模型。

public abstract class Factory{public abstract Student_normal creator();public abstract Student_test creator(String name);}
public class SimpleFactory extends Factory{public Student_normal creator(){ ......... return new StudentA }
public Student_test creator(String name){.........return new StudentA_laugh|cry  }
}
public class BombFactory extends Factory{public Student_normal creator(){...... return new StudentB}public Student_test creator(String name){...... return new StudentB_laugh|cry }}
}

从上述代码分析,我们总共有两个抽象的creator类Student_normal和Student_test类,代表平时学生的两种状态,考试和不考试的状态,而每一个抽象类模型下面又有刚说的那两孩子,Student_normal类下面StudentA、StudentB,以此类推。那么我们为什么不直接建两个工厂就好了啊,因为他们是彼此有链接,有关系的,,我们将共同部分封装在抽象类中,不同部分使用子类实现。

抽象工厂模型相比普通工厂模型而言就多了一类角色[抽象工厂类],需要普通工厂类继承抽象工厂类来实现,抽象工厂类封装了生产商品共用的方法,普通工厂类则专门负责其单一的一类具体产品的生产。

Android开发之工厂模式初探相关推荐

  1. Android开发之模板模式初探

    模板模式我觉得在Android的开发中是最长用到的,基本是随处可见的,认识该模式,有助于我们对Android的源码及框架有一个更深层次的认识.那什么是模板模式呢,模板模式就是定义一个基本框架,将其中的 ...

  2. Android开发之策略模式初探

    策略模式主要定义一系列的算法,学过数据结构的朋友肯定知道,对于数组从大到小进行排序有着很多的算法,比如冒泡.交换.快速插入等等,策略模式就是把这些算法封装成一个个独立的类,方便使用时候进行任意的调用. ...

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

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

  4. iOS开发-简单工厂模式

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ...

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

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

  6. android工厂模式源码,android 设计模式:工厂模式

    放在开头:了解一个设计模式,首先也是最重要的就是了解它的设计依据 工厂模式按抽象的角度,层次不同分为: 抽象工厂方法   抽象工厂 先声明一点:下面提到的抽象类包括   接口,抽象类 抽象工厂方法设计 ...

  7. Android开发之Buidler模式初探结合AlertDialog.Builder解说

          什么是Buidler模式呢?就是将一个复杂对象的构建与它的表示分离,使得相同的构建过程能够创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它同意用户能够仅仅通过指定复杂对象 ...

  8. Android开发之Buidler模式初探结合AlertDialog.Builder讲解

    什么是Buidler模式呢?就是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就 ...

  9. android开发适配深色模式,手机不支持深色模式,如何用软件解决深色模式的问题?(附有系统全局深色模式实现方法...

    本帖最后由 巷子口的你 于 2020-8-8 07:57 编辑 1.92允许通过设置为助手应用来饮捷切频深色模式(设置入口一般为系统默认应用-助手和语音输人, MIU需要设置为语音助手)提醒:稳定模式 ...

最新文章

  1. 如何在Angular.js选择框中使用默认选项
  2. Java多线程专题一:并发所面临的问题
  3. Oracle数据库asm原理,Oracle数据库中ASM功能解剖
  4. Ping Function
  5. 深度解析K-L变换 及其 在特征识别中的应用
  6. vlookup查找值不唯一时怎么办
  7. c语言设计成行考核答案,20秋广东开放大学C语言程序设计成性考核参考答案(10页)-原创力文档...
  8. okhttp 工具类_日语学习工具推荐,小白必备!
  9. 台式电脑打不开计算机c盘,电脑c盘打不开进不了系统怎么办
  10. JavaScript 是按值传递还是按引用传递的
  11. 眨眼视频制作与生成活体视频生成
  12. selenium实战爬取股票
  13. Mac连接Ubuntu服务器并用屏幕共享app显示远程应用图形界面
  14. android 检测输入法,Android判断软键盘 输入法 是否显示
  15. 实现在线预览 pdf 以及添加水印
  16. DIY手动定制一个属于自己的软件安装管理器工具盘[二]
  17. 华为防火墙地址转换技术(NAT)
  18. PreScan 使用点云雷达代替激光雷达操作步骤:
  19. Spring Security登录用户数据获取(4)
  20. 数据库连接数和数据库连接池的连接数区别?

热门文章

  1. python定义字符串数组_从字符串数组(或元组)在Python中创建动态sql“ in list”子句的“最佳”方法是什么?...
  2. vue点击改变data值_vue 中自定义指令改变data中的值
  3. html div 垂直对齐,div垂直对齐中间css
  4. hr2000 光谱Matlab,HR4000 HR2000 HR2000+ 光纤光谱仪 CG HC-1光栅 消除高阶衍射滤光片-广州标旗...
  5. linux常用指令_Linux系统常用指令总结
  6. python redis处理高并发-Python高并发解决方案实现过程详解
  7. 请用状态转换图描述一个绘制折线的对话过程_CAD画一个元器件电路符号(AD)...
  8. 876. Middle of the Linked List - LeetCode
  9. 如何进行大数据分析及处理?
  10. Echarts4.0 使用系列——折线图,这里可能有你需要的