设计模式(五)——工厂方法模式
工厂方法模式(Factory Method Pattern)其定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式的优点
1. 工厂方法模式可以降低模块间的耦合性,使用工厂方法模式创建一个对象,不再需要知道创建该对象的艰辛过程和必要信息,只需要提供一个产品的约束条件(例如,类名或约束字符串)就可以获取需要的对象。
2. 工厂方法有良好的扩展性。
3. 屏蔽了产品类,调用者只需要关系产品类的接口。因为产品类的具体对象实例是由工厂产生的。
假设如下场景:
有一个汽车工厂,老板想要生产各种类型汽车,他不想管你们怎么生产,他只给工厂工作人员一个汽车图纸,说,我要这个类型的汽车,然后就可以生产出来,注意工厂还是原来的工厂,不可能说新来一种类型的汽车我就新建一个工厂,那我们的实现方式如下:
首先定义一个汽车的接口:
package com.gy.designpattern.factorymethod;
/**
* ClassName:Car <br/>
* Function: 定义一个汽车的公共接口. <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2012-7-4 下午2:04:52 <br/>
* @author gongyong
* @version
* @since JDK 1.6
* @see
*/
public interface Car {
public void run();
}
然后定义两种类型的汽车:
package com.gy.designpattern.factorymethod;
/**
* ClassName:AudiCar <br/>
* Function: 奥迪汽车模型. <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2012-7-4 下午2:07:13 <br/>
* @author gongyong
* @version
* @since JDK 1.6
* @see
*/
public class AudiCar implements Car{
/**
*奥迪可以跑.
* @see com.gy.designpattern.factorymethod.Car#run()
*/
@Override
public void run(){
System.out.println("奥迪在跑!");
}
}
package com.gy.designpattern.factorymethod;
/**
* ClassName:BenzCar <br/>
* Function: 奔驰汽车模型 <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2012-7-4 下午2:09:00 <br/>
* @author gongyong
* @version
* @since JDK 1.6
* @see
*/
public class BenzCar implements Car{
/**
* 奔驰可以跑.
* @see com.gy.designpattern.factorymethod.Car#run()
*/
@Override
public void run(){
System.out.println("奔驰在跑!");
}
}
然后我们定义个汽车生产工厂:
package com.gy.designpattern.factorymethod;
import java.util.List;
import java.util.Random;
import com.gy.designpattern.util.ClassUtils;
/**
* ClassName:CarFactory <br/>
* Function: 汽车生产工厂. <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2012-7-4 下午2:10:29 <br/>
* @author gongyong
* @version
* @since JDK 1.6
* @see
*/
public class CarFactory {
/**
* createCar:定义一个汽车生产车间,只要我们把汽车类型传进去就可以产生这类汽车. <br/>
* @author gongyong
* @param c
* @return
* @since JDK 1.6
*/
public static Car createCar(Class c){
Car car=null;
try{
car =(Car)Class.forName(c.getName()).newInstance();
}catch(Exception e){
}
return car;
}
/**
* createCar:这个方法就强大了,可以随机创建所有实现了car接口的各种CAR. <br/>
* 这个不是必须的,是我为了偷懒改进的一个方法
* @author gongyong
* @return
* @since JDK 1.6
*/
public static Car createCar(){
Car car=null;
//获得实现了car接口的各种car类型,ClassUtils是一个自己写的工具类
List<Class> concreteCarList=ClassUtils.getAllClassByInterface(Car.class);
Random random=new Random();
int rand=random.nextInt(concreteCarList.size());
car=createCar(concreteCarList.get(rand));
return car;
}
}
我们注意到上面用到了一个ClassUtils,这个类是我自己实现的一个工具类,网上类似的例子很多,这里我不写出来了,有兴趣可以自己写一个,有需要给我留言,嘿嘿。
最后,工厂建好了,老板说,开工:
package com.gy.designpattern.factorymethod;
/**
* ClassName:Boss <br/>
* Function: Boss说要生产哪种汽车就生产哪种. <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2012-7-4 下午2:16:48 <br/>
* @author gongyong
* @version
* @since JDK 1.6
* @see
*/
public class Boss {
public static void main(String[] args){
//老板说生产奔驰车
Car benzCar=CarFactory.createCar(BenzCar.class);
benzCar.run();
//老板说生产奥迪车
Car audiCar=CarFactory.createCar(AudiCar.class);
audiCar.run();
//老板说爱生产啥是啥,只要是汽车
for(int i=0;i<100;i++){
Car car=CarFactory.createCar();
car.run();
}
}
}
看见了吧,so easy啊,老板再也不用担心我们造汽车了~
分享到:
相关推荐
工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...
此 时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许 系统不修改工厂类逻辑的情况下来添加新产品,这样也就克服了简单工厂模式中缺点。下面看下工厂模式 的具体实现...
这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。
简单工厂模式,也称为静态工厂模式,是一种创建型设计模式,它提供了一个静态方法来创建对象,而无需暴露实例化逻辑。在简单工厂模式中,一个单一的工厂类负责生产所有相关类型的实例。这种模式适用于产品种类较少且...
**设计模式——简单工厂模式** 简单工厂模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。在简单工厂模式中,一个专门的类(称为工厂类)负责创建对象,客户端无需知道所创建的对象的具体类,只需要...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式的主要目的是为了隔离产品对象的创建和使用,使得系统对产品类的依赖降低到最低,同时也方便了产品的扩展和...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许客户端使用一个通用接口来创建一组相关或相互依赖的对象,而无需关心它们的具体实现。在Java或其他...
在IT行业中,设计模式是软件开发中的重要概念,它们代表了在特定场景下解决常见问题的最佳实践。本文将深入探讨“工厂方法模式”,并结合比萨店生产比萨的实例来解析这一模式的运用。首先,我们要理解工厂方法模式的...
在《设计模式实现——观察者模式》这篇博客中,作者可能详细解释了观察者模式的概念、结构以及其在实际编程中的应用。以下是对观察者模式的详细阐述: 1. **模式定义**:观察者模式是一种对象行为型模式,它允许...
抽象工厂模式是一种重要的软件设计模式,它属于创建型模式,主要解决的是当系统需要创建一系列相关或相互依赖的对象时,而这些对象的类在运行时可能不确定的问题。在这个模式中,我们通过一个抽象工厂接口来定义创建...
Android之大话设计模式——:抽象工厂模式借鉴.pdf
《设计模式之——工厂方法(Factory Method)》 在软件工程中,设计模式是一种解决常见问题的可重用解决方案,它被广泛应用于构建高质量、可维护的代码。工厂方法是面向对象设计模式的一种,属于创建型模式。这个...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要解决对象的创建问题,降低了客户端代码与具体产品类之间的耦合度。在本实验中,我们将深入理解和应用C#语言实现简单工厂模式。 简单工厂模式的...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。刘伟先生在讲解设计模式时,通常会深入浅出地介绍这些模式的原理、应用场景以及如何有效地在实际编程中应用它们。设计模式并不是...
Java设计模式——工厂设计模式详解 在软件设计中,工厂设计模式是一种常用的设计模式,主要用于实例化有共同接口的类。Java设计模式——工厂设计模式是Java中的一种常用的设计模式,主要用于实例化有共同接口的类。...
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
**工厂模式**是一种常见的设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当我们创建对象时,不会直接实例化具体类,而是通过一个工厂类来生产所需的对象。这种模式的核心在于封装了对象...
本Demo程序主要涵盖了两种常用的创建型设计模式——简单工厂模式(Simple Factory)和工厂方法模式(Factory Method)。这两种模式都是用来创建对象,但它们在灵活性和抽象程度上有所不同。 简单工厂模式是一种静态...
《设计模式——GFour》是一本深受IT从业者喜爱的经典书籍,尤其在C++开发者中具有广泛影响力。设计模式是软件工程领域中的一种最佳实践,它总结了在特定情境下解决问题的常见方法,使得代码可读性更强,复用性更高,...