设计模式(五)——工厂方法模式
工厂方法模式(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啊,老板再也不用担心我们造汽车了~
分享到:
相关推荐
这个是http://blog.csdn.net/dawanganban/article/details/9877593博客中java设计模式的源代码。下载前请先看《设计模式——工厂方法模式》一文。
设计模式——抽象工厂模式源码,设计模式——抽象工厂模式源码
此 时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许 系统不修改工厂类逻辑的情况下来添加新产品,这样也就克服了简单工厂模式中缺点。下面看下工厂模式 的具体实现...
这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。
这个是http://blog.csdn.net/dawanganban/article/details/9875873博客中java设计模式的源代码。下载前请先看《设计模式——简单工厂》一文。
经典的设计模式————简单工厂模式,里面有实验文档和实验源代码还有课件助于你的学习
vs2010实现的软件设计模式——抽象工厂,是软件工程专业学生专业技能之一
Android之大话设计模式——:抽象工厂模式借鉴.pdf
写博客上传的代码:blog http://blog.csdn.net/t1234xy4/article/details/52424048
NULL 博文链接:https://maidoudao.iteye.com/blog/1328618
设计模式C#描述之——简单工厂模式,让你学习C#的一种设计模式
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
NULL 博文链接:https://quicker.iteye.com/blog/607944
Android之大话设计模式——:抽象工厂模式参考.pdf
主要介绍了Java设计模式——工厂设计模式详解,具有一定参考价值,需要的朋友可以了解下。
工厂模式: – 实现了创建者和调用者的分离。 – 详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改...
java23种设计模式 工厂模式 ,抽象工厂,建造者模式,单态模式,原型模式
本文实例讲述了Python设计...设计模式——工厂方法模式 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类. 工厂方法模式克服了简单工
工厂方法模式根据产品的等级结构使用对应的工厂来创建特定的产品,它一般包括抽象工厂、具体工厂和抽象产品、具体产品,每一个特定工厂用于创建一个对应的产品。模式的简易UML图例如下下面是使用AspectJ实现的工厂...
简介 设计模式是为了解决一些出现的问题设计的解决方案。是长时间经验的总结,是根据...工厂模式 在类中实现一个接口创建指定对象,使一个类的实例化延迟到了子类。简单来说把类的创建都封装起来,只需要调用一个子类