`

Java与模式之工厂模式

阅读更多

工厂模式用于创建对象,根据不同的结构形式又可分为简单工厂模式,工厂方法模式和抽象工厂模式。

 

简单工厂模式(Simple Factory) ,又叫静态工厂模式。

顾名思义,就是提供一个静态方法来封装对象的实例化,目的是为了隐藏实例化过程而不让客户端直接掉调用构造函数或者无法通过构造函数来实现实例化(抽象类)。示例代码如下:

class FooSimpleFactory{
    public static Foo createFoo(){
        return new FooImpl();
    }
}

abstract class Foo{
      
}
class FooImpl extends Foo{
      public FooImpl(){}
} 

 如果将工厂类和需创建对象类合二为一,会变成什么样子呢?

abstract class Foo{
     public static Foo create(){
         return new FooImpl();
     }
}
class FooImpl extends Foo{
      public FooImpl(){}
} 

是不是屏蔽了实例化的过程啊。相信读过java源码的童鞋一定发现了,DateFormat.getDateInstance()就是简单工厂模式。

让我们再把抽象类去掉,换成具体类,然后给一个私有的构造函数,是不是同样可以隐藏实例化过程呢,示例代码如下:

class Foo{
     private Foo(){}
     public static Foo create(){
           retirm mew Foo();
     }
}

细心的读者一定发现跟另外一个设计模式很像,对了,就是单例模式。

 

 

工厂方法模式(Factory Method) , 又叫虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。

实现方式是通过定义一个工厂接口,目的是为了将实例化过程推迟到之类中。示例代码如下:

interface FooFactory{
    public Foo create();
}

class FooFactoryImpl implements FooFactory{
     public Foo create(){
         return new FooImpl();
     }
}

abstract class Foo{}
class FooImpl extends Foo{
    public FooImpl(){}
}
abstract class 

 java源码中,工厂方法模式的例子很多,比如Collection.iterator()方法,URL.openConnection()方法。

让我们把示例代码稍微改一下,将工厂类和需创建对象类合二为一,结果怎么样呢?

abstract Foo(){
    public Foo create(){
         initilize();
    }
    public abstract Foo initialize(){}
 }
 class FooImpl extends Foo{
    public FooImpl(){}
    public Foo initialize(){
          return new FooImpl();
    }
 }

 相信细心的读者一定可以发现,这里除了是工厂方法模式之外,还有另一个设计模式,就是模板方法模式。谁说模板方法模式不可以同时是一个工厂方法模式呢?

 

抽象工厂模式(Abstract Factory) , 工厂方法模式用于支持一个抽象产品等级结构的对象实例化,而抽象工厂模式用于支持多个抽象产品等级结构的对象实例化。那么为什么不采用多个工厂方法模式来实现呢,理论上可行,但是却会多出来很多的工厂类结构,于是抽象工厂模式就派上用场了。我们可以把多个抽象产品等级下的产品归类,就会发现,很多产品其实是属于同一个类型,虽然他们处于不同的产品等级结构中,这时候我们没有必要增加工厂类来实例化不同的产品等级结构下的同一个类型的产品,而是直接用同一个工厂方法来创建所有的同一类型的产品。

示例代码如下:

interface Factory{
      Foo createFoo();
      Product createProduct();
}
class FactoryImpl1 implements Factory{
      Foo createFoo(){return new Foo1();}
      Product createProduct(){return new Product1();}
}
class FactoryImpl2 implements Factory{
      Foo createFoo(){return new Foo2();}
      Product createProduct(){return new Product2();}
}
interface Foo{}
class Foo1 implements Foo{}
class Foo2 implements Foo{}
interface Product{}
class Product1 implements Product{}
class Product2 implements Product{}
 

java源码中,Toolkit就是一个很著名的抽象工厂模式的例子,实现了对Windows/Mac/Unix等不同平台的支持。

 

 

 

 

分享到:
评论

相关推荐

    java设计模式之工厂模式

    java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式...

    Java 工厂模式 抽象工厂 工厂方法模式

    本文将深入探讨Java中的工厂模式,包括基本的工厂模式、抽象工厂模式以及工厂方法模式。 **工厂模式**:工厂模式的核心思想是提供一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。这样,客户端无需...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂

    在Java中,简单工厂、工厂方法和抽象工厂是三种不同的工厂模式实现。 5. **简单工厂模式**:是最简单的工厂模式形式,它包含一个工厂类,根据传入的参数决定返回哪种类型的实例。虽然易于理解,但不易扩展,因为...

    java与模式之简单工厂模式

    在Java与模式之简单工厂模式中,我们首先理解其基本概念。简单工厂模式包含三个主要角色: 1. **产品接口(Product)**:定义了产品的公共接口,所有具体产品类都需要实现这个接口。 2. **具体产品(Concrete ...

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...

    java三种工厂模式文档+三个实例.rar

    Java工厂模式是面向对象设计模式中的一个重要概念,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象时不直接实例化具体类,而是通过一个接口或者抽象类来间接创建。这种模式的核心在于将对象的创建过程...

    工厂模式(简单工厂,普通工厂,抽象工厂)代码java

    在软件设计模式中,工厂模式是一种非常...在实际项目中,工厂模式经常与其他设计模式(如策略模式、建造者模式等)结合使用,以解决更复杂的问题。阅读并理解这些代码有助于深入理解工厂模式及其在Java编程中的应用。

    设计模式-工厂模式 Java源码

    在Java编程语言中,工厂模式通常分为简单工厂模式、工厂方法模式和抽象工厂模式三种类型。这些模式都是围绕着一个中心思想:将对象的实例化过程封装起来,使代码更加灵活且易于维护。 1. **简单工厂模式**: 简单...

    Java 工厂设计模式例题

    例题简单的阐述了Java工厂模式的概念,有利于读者更好地了解Java工厂模式

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    在给定的资源中,"设计模式交流之工厂模式-shannonxu-2014-10-24.pptx"可能是详细的PPT讲解,涵盖了这些模式的概念、结构、优缺点以及实际应用案例。而"Factory"可能是一个代码示例,展示了工厂模式的具体实现,包括...

    设计模式之工厂模式Java实现和类设计图

    工厂模式作为其中的一种,是对象创建型模式,它的主要目的是为了隔离对象创建过程与客户端之间的关系,使得创建过程更加灵活,同时也隐藏了具体的创建过程。本篇将深入探讨工厂模式在Java中的实现以及类设计图的应用...

    java设计模式之工厂方法模式

    在Java中,工厂方法模式允许我们定义一个创建对象的接口,但让实现这个接口的类决定实例化哪一个类。这样,类的实例化过程就被推迟到了子类中。 工厂方法模式的核心在于抽象工厂(Abstract Factory)和具体工厂...

    JAVA设计模式的工厂模式文档和代码

    工厂模式是设计模式中的一种,属于创建型模式,它的主要目标是提供一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂模式使代码能够独立于实际的产品类型进行工作。 工厂模式的核心思想是通过一个共同的...

    Java与模式(闫宏)

    《Java与模式》是闫宏大师的一部经典之作,它将古老的哲学智慧——道德经的智慧,巧妙地融入到现代编程语言Java的设计模式之中。这本书不仅深入浅出地讲解了23种经典的设计模式,还提供了丰富的实践案例,旨在帮助...

    java设计模式-工厂模式

    Java设计模式中的工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它不会直接创建,而是调用一个工厂对象来完成创建工作。这种模式的核心在于封装了对象...

    设计模式单例模式和工厂模式综合应用

    **代码**文件则提供了实际的Java实现,通过查看这些代码,我们可以看到单例模式和工厂模式如何在实践中被运用,包括类的定义、方法的实现以及如何通过代码调用来创建和管理对象。 总的来说,这个项目为学习和理解...

    Java中工厂模式案例

    在软件设计模式中,工厂模式是一种非常...通过工厂模式,我们可以将对象的创建与对象的使用分离,使得代码结构更加清晰,同时也能更好地应对需求的变化。因此,熟练掌握工厂模式对于任何Java开发者来说都是非常重要的。

    设计模式之java工厂模式

    "设计模式之java工厂模式"是关于如何优雅地创建对象的一种经典设计模式,它属于创建者模式类别。创建者模式主要关注对象的创建,而工厂模式则在其中扮演着重要角色,因为它提供了一种抽象的方式来创建对象,从而使...

    JAVA设计模式之工厂模式.pdf

    JAVA设计模式之工厂模式 JAVA设计模式之工厂模式是软件开发中一种常用的设计模式,它专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。 一、工厂...

Global site tag (gtag.js) - Google Analytics