设计模式之-工厂模式
来源:互联网 发布:停车用什么软件 编辑:程序博客网 时间:2024/06/04 21:01
- 工厂模式分类
- 为什么工厂类中的方法必须是静态的
- 抽象工厂Abstract Factory模式
- Abstract Factory模式的结构
- 工厂模式分类
设计模式之-工厂模式
1.工厂模式分类
简单工厂模式, 抽象工厂模式, 静态工厂模式 , 工厂方法模式
静态工厂模式 ( Static Factory )就是静态类形式
简单工厂模式:(Simple Factory Pattern) 通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
优缺点:简单工厂模式能很好封装内部实现,调用简单。
link:工厂模式
2.为什么工厂类中的方法必须是静态的?
下面咱们就来探讨一下 ,其实这样不用静态的在语法上并没有错误,但却完全没理解java面向对象设计的精髓。
如果直接new出FriutFactory的对象,客户端就必须自己控制工厂类的构造和生成,客户端必须非常清楚工厂的构造函数(比如构造函数有多少个参数,输入参数时有什么条件等等),也知道工厂的内部细节,一旦工厂扩展或者改变了,客户端在没有得到通知的情况下就不知道怎么调用了。而是用静态方法构造客户端则完全不关心你是如何构造对象的所以客户端不需要了解工厂的构造细节,一旦工厂内部发生变化,客户端也不需要关心。它只需要关心最后的结果就行了,因为所有的细节都在工厂内部被处理完了。
(简单工厂模式UMl )
2、工厂方法 (Factory Method)模式
定义:定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式把类实例化的过程推迟到子类。
(工厂方法类图)
看上去和简单工厂模式不同的地方就是在简单工厂模式的基础上。将工厂类再次进行抽象。
这样工厂类同样可以根据不同条件,有子类实现。这样会有更多的组合方式。是简单抽象工厂不能比拟的。
3.抽象工厂(Abstract Factory)模式
定义:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。
为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family)。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。如图:
图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一的确定这个产品。
引进抽象工厂模式
所谓的抽象工厂是指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。如果用图来描述的话,如下图:
Abstract Factory模式的结构:
图中描述的东西用产品族描述如下:
抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。
程序举例:
Blog:http://blog.csdn.net/ipqxiang/article/details/1955677 抽象工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之---工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之-工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之 ------工厂模式
- 设计模式之工厂模式
- [Qt笔记]:QWidget设置背景图片
- java虚拟机对于静态字段的处理
- ROS Learning-019 learning_tf-03(编程) 添加额外的坐标系 (Python版)
- 第二周项目1-C/C++语言中函数参数传递的三种方式
- ccf 201403-4
- 设计模式之-工厂模式
- OC-@dynamic 关键字
- Intent Flag介绍 intent.addFlags()
- 防火墙的功能
- 一个简单地爬虫教程
- Java的三大框架
- Eclipse 反编译插件安装jad(转)
- nat123的自启动
- HHU 1015 圆上的点点点点点点点点点点点点点点(浮点数精度处理)