前面学习简单工厂模式的时候提到,简单工厂虽然很好用,就一个静态工厂方法就解决了所有产品类实例化的工作。但也正是因为它将所有产品类的创建逻辑都封装到一个静态方法中,如果现在我需要添加一个新的产品类,那么就必须修改简单工厂的这个静态方法;这样的话,就破坏了“开-闭”原则,对修改没有完全的关闭。今天讲的工厂方法模式,正是对简单工厂模式的补充,使用工厂方法模式弥补了简单工厂模块对“开-闭”原则的支持不足的问题。
工厂方法模式在工厂类的基础上,抽象出一个所有工厂类的父类 -- 抽象工厂,然后为每个具体产品都提供一个具体的工厂类,一个具体的工厂类就只负责一类具体产品的创建工作! 这样就将在静态工厂模式方法中大量的创建逻辑利用多态的方式来实现了。如果有新的产品类加入进来,不需要再修改创建原有的逻辑结构,只需在抽象工厂类之下再新建一个新的工厂类,用对新的产品类进行创建工作。
就好比一个制鞋工厂,开始时,这间鞋厂的规模还不大,因此皮鞋,运动鞋,休闲鞋等所用种类的鞋都有一个部门制造完成,但随着规模的不断扩大,鞋子的数量,款式需求越来越多;一个部门根本应付不了。这种情况下,需要将每种类型的鞋都分一个子部门,皮鞋的生产有专门的皮鞋生产部,运动鞋有专门的运动鞋生产部;如果鞋厂现在需要提供凉鞋。那些只需为凉鞋增加一个凉鞋生产部就可以了;完全不会影响到皮鞋和运动鞋的生产过程。这就是工厂方法在实际应用中的一个例子。下面是他的实现代码。
/*
*
* 所有鞋生产部门的抽象类
*
*/
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();
}
}
分享到:
相关推荐
在给定的资源中,"设计模式交流之工厂模式-shannonxu-2014-10-24.pptx"可能是详细的PPT讲解,涵盖了这些模式的概念、结构、优缺点以及实际应用案例。而"Factory"可能是一个代码示例,展示了工厂模式的具体实现,包括...
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...
工厂方法模式是设计模式中的创建型模式之一,它在软件工程中扮演着非常重要的角色,尤其是在C#这样的面向对象编程语言中。工厂方法模式提供了一种封装对象创建过程的方法,使得具体的创建过程延迟到子类中进行,从而...
java设计模式 工厂方法模式uml类图,一张图就让你秒懂工厂方法模式
工厂方法模式是设计模式中的创建型模式,它提供了一种创建对象的最佳方式。在这个模式中,一个类(称为工厂类)不再直接实例化具体的产品,而是定义一个接口或抽象类,由子类来决定实例化哪一个类。这样做的好处在于...
本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...
工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...
本文将深入探讨三种工厂模式:简单工厂模式、工厂方法模式以及抽象工厂模式,并结合源码分析其应用场景和优缺点。 1. 简单工厂模式 简单工厂模式(Simple Factory Pattern)是一种静态工厂方法,它通过一个公共的...
### 软件设计之工厂方法模式解析及Java实现 #### 一、工厂方法模式概述 工厂方法模式(Factory Method Pattern)是一种常用的面向对象设计模式,属于创建型模式之一。它提供了一种创建对象的最佳方式。在工厂方法...
这三种工厂模式的共同之处在于它们都为对象的创建提供了抽象层,隐藏了具体的实例化过程。然而,它们之间的区别在于灵活性和抽象程度: - 工厂方法模式提供了一种定义抽象接口的方法,让子类来决定具体实例化哪个类...
3. Qt工厂模式工程 4. Qt工厂模式例程 5. Qt工厂模式例子 6. 简单工厂模式 部分源码实例: // 奔驰工厂 class BenzFactory : public AFactory { public: ICar* CreateCar() { return new BenzCar(); } }; // ...
本文将深入探讨Java中的工厂模式,包括基本的工厂模式、抽象工厂模式以及工厂方法模式。 **工厂模式**:工厂模式的核心思想是提供一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。这样,客户端无需...
Java工厂方法模式 Java工厂方法模式是一种创建型模式,它属于类的创建型模式。该模式的主要思想是,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。这样做的目的是将类的实例化操作延迟到子类中完成...
工厂方法模式是一种设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,当我们创建对象时,不会直接实例化具体的产品类,而是通过一个工厂类来创建。这样做的好处是,当需要添加新的产品...
工厂模式分为三种主要形态:简单工厂模式、工厂方法模式和抽象工厂模式。 1. 简单工厂模式:也称为静态工厂方法模式,它通过一个静态方法来创建对象。在这个例子中,`FruitGardener` 类就是简单工厂,它根据输入的...
在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...
工厂方法模式是面向对象设计模式中的行为模式,它属于创建型模式的一种,主要解决的是当一个类不知道它所必须创建的对象的类的时候,或者当一个类希望由它的子类来决定实例化哪个类的时候,如何封装这个实例化过程的...
java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式...
工厂方法模式是一种面向对象的设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个工厂类负责创建所关心的对象,而客户端代码则使用这些对象,而不必知道对象是如何被创建的。这种...