设计模式——工厂模式
来源:互联网 发布:如何看自己淘宝的等级 编辑:程序博客网 时间:2024/06/01 10:35
1、工厂模式定义
定义:工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,也就是说工厂方法让类把实例化推迟到子类。
用途:工厂模式用于封装对象的创建,也即工厂方法模式封装了具体类型的实例化。
特点:工厂模式通过让子类决定该创建的对象是什么,来达到将对象创建的过程进行封装的目的。其中“决定”并不是指该模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际创建的产品是哪一个。
2、工厂模式分类
工厂模式主要是为创建对象提供了接口。工厂模式可以分为以下三种:
简单工厂模式(Simple Factory):不是真正的设计模式,但能将客户程序从具体类中解耦(将实例化具体类的代码从应用中抽离,或者封装起来)。
工厂方法模式(Factory Method):工厂方法创建一个框架,让子类决定要如何实现。
抽象工厂模式(Abstract Factory)
3、为何使用工厂模式
工厂模式是我们最常用的模式之一。为什么工厂模式如此常用,因为工厂模式相当于创建实例对象的new,我们经常要根据类class来生成实例对象,如A a=new A(),而工厂模式也是用来创建实例对象的。因此以后在使用new时,可以考虑一下能否使用工厂模式,虽然这样做,可能会多做一些工作,但这会给你的系统泰来更大的可扩展性和尽量少的修改量。
以类A为例,创建A的实例对象:A a=new A();可是在实际情况中,通常在创建实例时进行的初始化工作不一定会像赋值那么简单的事,可能会是很长的一段代码,如果这样写入构造函数中,这样的代码就很难看了。初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派"切割"成每段,将每段再"封装"起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。
在例中,首先我们需要将创建实例的工作与使用实例的工作分开,也就是说,让创建实例所需要的大量初始化工作从A的构造函数中分离出去。这时我们就需要建立一个专门生产A实例的工厂,也即采用工厂模式来生成对象,不能再用上面简单new A()。
public class Factory{
public static A creator(int which){
//getClass 产生A 一般可使用动态类装载装入类。
if (which==1)
return new A1();
else if (which==2)
return new A2();
}
}
工厂方法用来处理对象的创建,并将这样的行为封装在子类中。工厂方法帮助我们将产品的“实现”从“使用”中解耦。如果增加产品或者改变产品的实现,Creator并不会受到影响(因为Creator与任何ConcreteProduct之间都不是紧耦合)。- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式——工厂设计模式
- Java设计模式—工厂设计模式
- 设计模式——抽象工厂模式、工厂方法模式
- Java设计模式—工厂方法模式&抽象工厂模式
- Java设计模式—工厂方法模式&抽象工厂模式
- Fedora 10中图形界面与文本界面的切换
- 无法在Safari中显示pdf
- linux下的共享库(动态库)和静态库
- opencv x64 IDE setting
- asp.net的10个提升性能或扩展性的秘密(一)
- 设计模式——工厂模式
- 查询SQL Server2008数据库表信息
- 后缀数组(不完善)
- 变参标准函数的重新封装,如printf
- 标记和标志
- 编写高性能 Web 应用程序的 10 个技巧
- 破解hishop6.0
- 03-JavaWeb-XML-xml编程-dom解析
- Unity3D学习笔记07:射线Ray实现点击拾取