前面学习简单工厂模式的时候提到,简单工厂虽然很好用,就一个静态工厂方法就解决了所有产品类实例化的工作。但也正是因为它将所有产品类的创建逻辑都封装到一个静态方法中,如果现在我需要添加一个新的产品类,那么就必须修改简单工厂的这个静态方法;这样的话,就破坏了“开-闭”原则,对修改没有完全的关闭。今天讲的工厂方法模式,正是对简单工厂模式的补充,使用工厂方法模式弥补了简单工厂模块对“开-闭”原则的支持不足的问题。
工厂方法模式在工厂类的基础上,抽象出一个所有工厂类的父类 -- 抽象工厂,然后为每个具体产品都提供一个具体的工厂类,一个具体的工厂类就只负责一类具体产品的创建工作! 这样就将在静态工厂模式方法中大量的创建逻辑利用多态的方式来实现了。如果有新的产品类加入进来,不需要再修改创建原有的逻辑结构,只需在抽象工厂类之下再新建一个新的工厂类,用对新的产品类进行创建工作。
就好比一个制鞋工厂,开始时,这间鞋厂的规模还不大,因此皮鞋,运动鞋,休闲鞋等所用种类的鞋都有一个部门制造完成,但随着规模的不断扩大,鞋子的数量,款式需求越来越多;一个部门根本应付不了。这种情况下,需要将每种类型的鞋都分一个子部门,皮鞋的生产有专门的皮鞋生产部,运动鞋有专门的运动鞋生产部;如果鞋厂现在需要提供凉鞋。那些只需为凉鞋增加一个凉鞋生产部就可以了;完全不会影响到皮鞋和运动鞋的生产过程。这就是工厂方法在实际应用中的一个例子。下面是他的实现代码。
/*
*
* 所有鞋生产部门的抽象类
*
*/
public abstract class AbstractShopFactory(){
public abstract Shop createShop();
}
/*
*
* 皮鞋生产部门
*
*/
public class leatherShoeFactory extends AbstractShopFactory{
@Override
public Shop createShop() {
// TODO Auto-generated method stub
return new leatherShop();
}
}
/*
*
* 运动生产部门
*
*/
public class sportShoeFactory extends AbstractShopFactory{
@Override
public Shop createShop() {
// TODO Auto-generated method stub
return new sportShoe();
}
}
/*
*
* 鞋子的抽象类
*
*/
public abstract class Shoe(){
public abstract void wear();
}
/*
*
* 皮鞋
*
*/
public class leatherShoe extends Shoe{
@Override
public void wear(){
System.out.println("do something...");
}
}
/*
*
* 运动鞋
*
*/
public class sportShoe extends Shoe{
@Override
public void wear(){
System.out.println("do something...");
}
}
public class client{
public static void main(String[] args){
// 创建一个皮鞋生产部门
AbstractShoeFactory lFactory = new leatherShopFactory();
// 生产皮鞋
Shoe leatherShoe = lFactory.createShoe();
// 创建一个运动鞋生产部门
AbstractShoeFactory sFactory = new sportShopFactory();
// 生产运动鞋
Shoe sportShoe = sFactory.createShoe();
}
}
分享到:
相关推荐
介绍的是工厂模式 包括简单工厂模式、工厂方法模式、抽象工厂模式 包括PPT和代码
工厂方法模式工厂方法模式工厂方法模式工厂方法模式工厂方法模式
java设计模式 工厂方法模式uml类图,一张图就让你秒懂工厂方法模式
工厂方法模式和抽象工厂模式的区别,对工厂方法模式和抽象工厂模式做了简单的比较
本文章通俗易懂的对工厂模式进行了讲解,相信您看完这篇文章会对工厂模式有更深入的了解
设计模式 c# 工厂方法模式
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
设计模式之禅之 工厂方法模式+策略模式 设计模式之禅之 工厂方法模式+策略模式
java工厂方法模式 java工厂方法模式java工厂方法模式java工厂方法模式java工厂方法模式java工厂方法模式
java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式...
设计模式之工厂方法、简单工厂、抽象工厂
3. Qt工厂模式工程 4. Qt工厂模式例程 5. Qt工厂模式例子 6. 简单工厂模式 部分源码实例: // 奔驰工厂 class BenzFactory : public AFactory { public: ICar* CreateCar() { return new BenzCar(); } }; // ...
工厂方法模式,主要是利用反射机制获取配置文件的信息,用户可以在不知道如何生产对象的情况下获取对象。包括源代码和文档(文档在本博客的文档说明中)。
设计模式,工厂方法模式源文件,基本源代码
Java实现的工厂模式,抽象工厂,工厂方法模式
工厂方法模式Demo
本资源主要介绍工厂方法模式和抽象工厂模式。二者都与工厂相关,,但是其本质又大相径庭。这里先来简单介绍下二者的区别,以免混淆。 抽象工厂模式:提供一个接口,用于创建一系列相关的对象,而无需指定具体的类。...
工厂方法模式的C语言实现。改写自http://blog.csdn.net/sx_wpc/article/details/7645062一文的代码。
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂