工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。
为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如:
A a = new A ();
工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
我们以类Sample为例, 如果我们要创建Sample的实例对象:
Sample sample=new Sample();
可是,实际情况是,通常我们都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等。
首先,我们想到的是,可以使用Sample的构造函数,这样生成实例就写成:
Sample sample=new Sample(参数);
但是,如果创建sample实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码就很难看了,需要重构(Refactor)。
所以我们应该考虑用工厂方法模式,其结构图如下:
我们假定一个工厂接口Factory要生产一种产品,我们还在计划阶段,不知道产品的细节,所以也给它一个抽象接口Product。完成计划后,我们开始考虑实施了,这时我们已经了解了产品和生产的具体详细情况,我们就有了两个具体类ConcreteFactory和ConcreteProduct。ConcreteFactory的operation方法负责具体生产情况。源代码如下:
/**
* Factory interface
*
* @version 0.00
* @author Barret_Qin
*/
public interface Factory {
Product factoryMethod();
}
/**
* Concrete factory
*
* @version 0.00
* @author Barret_Qin
*/
public interface ConcreteFactory {
public Product factoryMethod() {
return new ConcreteProduct();
}
}
/**
* Product interface
*
* @version 0.00
* @author Barret_Qin
*/
public interface Product {
void operation();
}
/**
* Concrete product
*
* @version 0.00
* @author Barret_Qin
*/
public class ConcreteProduct implements Product {
/*
* @see pattern.creational.factoryMethod.Product#operation()
*/
public void operation() {
System.out.println("I am from the operation of ConcreteProduct");
}
}
/**
* Test class
*
* @version 0.00
* @author Barret_Qin
*/
public class Tester {
/**
* @param args
*/
public static void main(String[] args) {
Factory factory = new ConcreteFactory();
Product product = factory.factoryMethod();
product.operation();
}
}
我们用Tester类进行测试,其输出结果应如下所示:
I am from the operation of ConcreteProduct
正如Tester类所示的那样,我们要得到产品Product,只需要调用Factory的factoryMethod方法,而不必关心其具体实现细节。另外,即使该工厂转型,开始生产其他产品,我们的客户端也不需要任何修改。
- 大小: 22.4 KB
分享到:
相关推荐
4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern...
本文实例讲述了Python设计...设计模式——工厂方法模式 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类. 工厂方法模式克服了简单工
3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)...
3.3 FACTORY METHOD(工厂方法)——对象创建型模式 3.4 PROTOTYPE(原型)——对象创建型模式 3.5 SINGLETON(单件)——对象创建型模式 第四章 结构型模式 4.1 ADAPTER(适配器)——对象结构型模式 4.2 BRIDGE...
Factory Method Pattern 工厂三兄弟之工厂方法模式(一) 工厂三兄弟之工厂方法模式(二) 工厂三兄弟之工厂方法模式(三) 工厂三兄弟之工厂方法模式(四) 抽象工厂模式-Abstract Factory Pattern 工厂三兄弟之...
之前讲到了C++设计模式——简单工厂模式,由于简单工厂模式的局限性,比如:工厂现在能生产ProductA、ProductB和ProductC三种产品了,此时,需要增加生产ProductD产品;那么,首先是不是需要在产品枚举类型中添加新...
3.2FactoryMethodPattern(工厂方法模式) 35 3.2.1定义 35 3.2.2现实例子——兵工厂 36 3.2.3C#实例——多文档系统 37 3.2.4Java实例——扩展了的手机工厂 41 3.2.5优势和缺陷 44 3.2.6应用情景 44 3.3...
3.2FactoryMethodPattern(工厂方法模式) 35 3.2.1定义 35 3.2.2现实例子——兵工厂 36 3.2.3C#实例——多文档系统 37 3.2.4Java实例——扩展了的手机工厂 41 3.2.5优势和缺陷 44 3.2.6应用情景 44 3.3...
工厂方法模式: 而是将具体创建的工作交给子类去做, 工厂方法模式 核心工厂类不再负责所有产品的创建, 成为一个抽象工厂角色, 仅负责给出具体工厂类必须实现的接口, 而不接触哪一个产品类应 当被实例化这种细节...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
ASP.NET 2.0使用Web Part创建应用程序之二(共二) 体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤 NET2.0系列介绍(一).NET 2.0 中Web 应用程序主题的切换 ASP.NET 2.0 中Web 应用程序主题的切换 2.0正式版中...
4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. ...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者...
pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...