5.封装创建-简单工厂方法(Simple Factory method)+多态工厂+抽象工厂(Abstract factories)
这个应该是我们平时接触得最多的设计模式了吧,我个人也是经常使用,这是一个创建型的设计模式,其实这3个模式原理都是一样的,不过使用了接口,内部类,所以使得实现方法更加的优雅。我们到底面对着一个什么样的问题,这才决定我们为什么要用它,假如你的系统里面很多地方需要创建a对象和b对象,很明显,这样是分散的分布在系统里面的,这时,如果你要在创建a对象的地方添加一个新类型c对象,那么你就惨了,你需要在那么多个地方创建,而且更加麻烦的是逻辑问题,因为多了一个对象,判断方面可能会出现不可预知的bug,这时候我们会想,为什么不弄成一个服务,生产服务,我使用的是a服务,而不是a对象,当我需要添加新的对象,我可以在a服务里面添加,这时候我的客户端代码就不需要改变了,需要改变的是生产a服务的时候加多一个对象,这就是工厂模式的基本思路:所有需要创建的对象的代码都由工厂来代工,当需要新的功能,新的类型,只需要改变一下工厂就ok了,这也保证了接口的稳定性。
简单工厂方法(Simple Factory method):
class car{
}
class benz extends car{}
class baoma extends car{}
class factory{
public static getCar(String type){
if(type.equals("Benz")) return new benz();
if(type.equals("baoma")) return new baoma();
}
}
这就是一个简单的工厂方法了,面对简单的系统,使用这个就很足够,但是一旦逻辑复杂了,创建的产品需要逻辑判断,那么这个工厂可能就负担不了了,而且所有逻辑都在工厂这里,一旦工厂着火,那么整个系统就该瘫痪了,所以我们就衍生出下一个工厂模式
多态工厂(Polymorphic factories):
多态工厂的好处就是为了解决刚才上诉的问题,他实现了每一类对象,每一个工厂,我觉得在逻辑上把纵多的逻辑分担在了每一个工厂上面,上面的例子,只需要为每一个产品添加一个工厂类即可
抽象工厂(Abstract factories):
抽象工厂其实更加一般化,更加抽象化,使用内部类实现更加优雅,我举个例子,奔驰和宝马都是跑车类型的,然后五菱和东方都是屌丝类型的,那么这时候是不是就有两个大类型,那么我们就为其创建两个工厂,每个工厂分别生产两大类型的车,然后跑车工厂就得生产奔驰宝马....,可以简单概述就是一个工厂生产多个相同大类型的产品,而且经常我们用到抽象工厂,我们可以假设是根据不同环境,生产不同的环境类型(一系列需要的产品)。
其实工厂模式的变形很多,只要感觉对了,就差不多了,不需要死扣,毕竟复杂度这个东西是一个很难以衡量的东西,而且工厂模式通常可以混用的。我的另外一篇文章说的比较好。
http://abcxo.iteye.com/admin/blogs/1476090
分享到:
相关推荐
集合+接口+继承+多态,集合+接口+继承+多态
Python工具箱.zip - 办公自动化、多态文件搜索、高级加密。Python工具箱.zip - 办公自动化、多态文件搜索、高级加密。Python工具箱.zip - 办公自动化、多态文件搜索、高级加密。Python工具箱.zip - 办公自动化、多态...
.archivetemp04 - 继承和多态 作业.doc
C++程序设计:第10章++多态.ppt
坦克大战,简易QQ界面......P1第1讲-内容介绍.项目演示.原理剖析 变量.数据类型 -运算符.流程控制 -.流程控制 -类.对象 -成员属性.成员方法 -成员方法.构造方法 -this.类变量 -类方法、封装 -访问修饰符.重载.覆盖 -...
学习Java程序入门-面向对象之封装,继承,多态(下).docx
第六周-第11章节-Python3.5-多态实例讲解.avi
【IT十八掌徐培成】Java基础第06天-03.多态-类多态-接口多态-同名属性问题.zip
本案例设计到的知识点为:面向对象中的封装、继承、多态以及文件IO流,在设计中有Worker职工的基类,以及分别派生类为普通员工、经理、以及总裁,基类中有纯虚函数子类分别作了实现。然后有个文件管理类,对用户做出...
笔记
多态--简单工厂
JAVA面向对象基础测试题-继承-封装-多态等测试题.docx
由abstract修饰的类叫抽象类 抽象方法必须声明在抽象类中 抽象方法语法: abstract type method_name(parameter_list); 声明抽象类语法: abstract class{…… } 使用:父类中的某些抽象不包含任何逻辑,并需要在...
7.11.5. 匿名内部类 7-31 7.12. 集合 7-31 7.12.1. 集合接口类层次 7-32 7.12.2. 集合类层次 7-33 7.12.3. 五个最常用的集合类之间的区别和联系 7-33 7.12.4. 比较 7-35 7.13. 反射 7-37 8. 七•异常 8-37 8.1. 异常...
7.11.5. 匿名内部类 7-31 7.12. 集合 7-31 7.12.1. 集合接口类层次 7-32 7.12.2. 集合类层次 7-33 7.12.3. 五个最常用的集合类之间的区别和联系 7-33 7.12.4. 比较 7-35 7.13. 反射 7-37 8. 七•异常 8-37 8.1. 异常...
行业资料-电子功用-具有不对称电荷陷获的多态存储器单元的说明分析.rar
Java编程实训 Java开发基础入门教程1-03 自定义方法(共14页).ppt Java编程实训 Java开发基础入门教程1-04 面象对象编程初步-类和对象(共54页).ppt Java编程实训 Java开发基础入门教程1-05 面向对象编程-封装(共...
9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 编?绦Q閤ml 9-5 3.php xml编程③...
Java ------ 多态作业
Simple Factory模式: 定义创建对象的接口,并封装对象的创建。 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来处理一些问题。抽象出一些类的公共接口作为抽象基类或者接口。这样的话,我们将会面临一个...