`
hz_chenwenbiao
  • 浏览: 1007835 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

简单工厂模式(Simple Factory)(转)

阅读更多

工厂模式,谈到这种模式时,主要是关注工厂角色的设计,也因为工厂的变化而分成三种不同的工厂模式,而其它的角色的变化,会使工厂的设计发生适应性改变。

简单工厂模式(Simple Factory)是工厂模式中最简单的一种模式,可能我们在实际开发中,已经使用过简单工厂模式,或者是简单工厂模式的某一种扩展或者变种而已。

记得我在很早的时候接触到的工厂模式就是,在某一个工厂类中,定义一系列的不同方法,每一个方法能够创建出某一个具体类的实例,这种无参的工厂方法,只要存在需要实例化的实体类的时候,就要在工厂类中增加一个创建的方法。这种实现方式的优点是,我们可以通过这个唯一的工厂类来管理整个应用中所有的对象的创建。

简单工厂模式的一般结构,如图所示:



简单工厂模式存在三个组成部分,参考《Java与模式》一书,对应于三个不同的角色:

01.工厂角色
02.抽象产品角色
03.具体产品角色

其实角色这个词用的比较确切,能够让我们理解到,每个角色的不是单纯地指一个类,可能是一组类所构成了这个角色。下面对三个角色进行描述:

01.工厂角色

工厂角色负责产品的生产工作。在简单工厂模式中,工厂类是一个具体的实现类,在系统设计中工厂类负责实际对象的创建工作。

工厂类(Factory)的特点是:

它知道系统中都存在哪些能够创建对象的具体类(ConcreteProduct),也知道该如何将创建的对象,以某种能够屏蔽具体类实现细节的方式(AbstractProduct)提供给所需要的其他角色来使用该对象提供的数据和服务。

02.抽象产品角色

抽象产品角色是具体的产品的抽象。抽象就是将产品的共性抽取出来,可以直接暴露给客户端(需要使用具体产品的角色),对所有的客户端来说,从工厂中直接获取到的原始产品的外部形态都是相同的,没有任何的差别,包括数据和服务。

这也就是说,具体客户端应该“秘密”掌握着某一个或一些具体产品的详细资料(具体产品类型、数据和服务),然后根据具体客户端(任何一个需要使用某种具体产品的数据和服务的实现类)需要什么样的附加数据和服务,进行类类型转换后,通过借助于对应的具体产品对象来完成其职责。

抽象产品角色,在实际系统中可以定义为接口或者抽象类。

03.具体产品角色

具体产品实现类一定是抽象产品类的实现或扩展。为了保证工厂类能够创建对象,工厂类需要知道具体产品的创建方式,这就涉及到具体产品类所提供的构造方法,以便,可能工厂类会向客户端提供具体创建服务所需要的数据。例如:

某个产品类需要通过一个账号才能构造其实例,所以工厂类必须根据它的创建需求,为客户端提供一个带账号参数的生产方法,才能创建该具体产品类的对象。

也就是说,工厂类依赖于具体产品实现类。同样,客户端类是依赖于工厂类的。

通过上述三个角色的描述,我们应该能够了解,系统中哪些类能够胜任上述的三个角色,并通过各类之间的关系,通过工厂模式来实现系统或者某个模块。在实际的设计过程中,可能不存在完全与上述基本简单工厂模式完全适应的,需要根据具体的需求来调整简单工厂模式的应用。只要能够实现系统的良好设计,有时候变化才能满足需要。

下面基于上述基本的简单工厂模式,观察产品结构变化,大致可以得到如下的情况:

第一种:

抽象产品角色退化为具体产品,上面是三个具体产品,代表了三个产品等级结构,对应的工厂方法中存在三个工厂方法来创建具体产品对象。

第二种:

这种情况,抽象产品角色和具体产品角色均退化了,只有工厂角色出现,实际上也就是工厂的自生产。通过工厂类本身创建其对象,提供客户端调用。

第三种:


只存在一个产品等级时,工厂类Factory中只存在一个对应的生产方法,根据类型参数来区别要创建的具体产品对象。

 

这种模式保证每个具体产品类具有默认的无参构造方法,因为工厂只能凭借类型来判断创建哪个产品类的对象,而客户端也无需关注构造产品类需要的参数数据。

如果还存在另一个产品等级结构时,可以非常方便地在工厂类中增加一个针对该产品结构的工厂方法,实现该种产品的创建。

第四种:


当某一个产品等级结构发生复杂的变化,即等级层次多的时候,使用简单工厂模式是可以适应的。同理,如果存在多个产品等级结构,只不过是在工厂中增加一个与该产品对应的生产方法而已。

第五种:


每一个具体的工厂作为产品角色,另一个单独的工厂作为工厂的管理者,是工厂角色,这也是简单工厂模式的表现。

总结

简单工厂方法模式,主要把握住工厂角色是一个具体的提供生产方法实现类,不会在简单工厂模式中出现某个抽象的工厂角色。简单工厂模式是创建模式,具体对象的创建是在工厂内部完成的,否则就不满足简单工厂模式。

简单工厂模式的优点是将对象的创建统一管理起来,将对象创建细节屏蔽(对客户端)起来,如果产品类发生了变化,无需修改提供给客户端的接口,达到了解耦合;缺点是,如果存在多个产品结构的时候,使用同一个工厂来管理,只要某一个产品结构发生变化,或者新增一个产品结构,都需要去修改工厂类的实现,也就是说,产品结构与工厂是高耦合的。

分享到:
评论

相关推荐

    java工厂模式SimpleFactory

    总的来说,Java工厂模式SimpleFactory是一种实用的设计模式,能够帮助我们更好地管理对象的创建过程,提高代码的可维护性和可扩展性。通过将对象的创建过程封装在工厂类中,我们可以在不修改客户端代码的情况下,...

    java 设计模式 Facade外观模式 Simple Factory 简单工厂模式

    在Java中,简单工厂模式适用于对象的创建过程较为固定或不复杂的情况。它定义一个公共的工厂类,根据传入的参数或者条件来决定返回哪个具体类的实例。这种方式降低了代码的耦合度,使得在不修改客户端代码的情况下,...

    JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)

    **简单工厂模式**是软件设计模式中的一种,属于创建型模式。在Java编程中,它是一种用于创建对象的简便方法,将对象的实例化过程封装到一个单独的工厂类中,使得客户端代码无需直接调用具体类的构造函数,而是通过...

    设计模式 创建型模式 Simple Factory模式(简单工厂)

    Simple Factory模式: 定义创建对象的接口,并封装对象的创建。 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来处理一些问题。抽象出一些类的公共接口作为抽象基类或者接口。这样的话,我们将会面临一个...

    Simple Factory Pattern.rar【GoF的简单工厂模式(C#源码)】

    简单工厂模式的实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品类的实例。简单工厂模式实际上不属于23个GoF模式,但它可以作为GoF的工厂方法模式(Factory Method)的一个引导。 UML: ...

    SimpleFactory

    "SimpleFactory" 是设计模式中的一种,通常称为简单工厂模式。它属于创建型设计模式,主要目的是提供一个创建对象的公共接口,让客户端可以不关心具体对象的创建过程,只需要知道所需对象的类型即可。这种模式简化了...

    工厂模式FactoryMode

    在Java中,工厂模式有三种主要形式:简单工厂模式、工厂方法模式和抽象工厂模式。 1. 简单工厂模式:也称为静态工厂模式,它通过一个静态方法来创建对象。在这个模式中,工厂类负责决定实例化哪个产品类。这种模式...

    Factory_Method&&Simple_Factory

    简单工厂模式(Simple Factory Pattern)是工厂方法模式的一个简化版本,它没有定义工厂接口,只有一个具体工厂类负责创建所有对象。简单工厂模式适用于产品种类较少,且不会频繁改变的情况。 在实际应用中,工厂...

    简单工厂模式,工厂方法模式,抽象工厂模式

    简单工厂模式(Simple Factory Pattern)是一种静态工厂方法,它通过一个公共的工厂类来创建对象。这个工厂类通常包含一个或多个静态方法,用于根据输入参数创建不同类型的实例。这种模式的优点在于客户端代码无需...

    Java设计模式之工厂模式(Factory)

    1. **简单工厂模式(Simple Factory)**:适用于需求较为简单的情况,主要负责创建一系列相关的对象。 2. **工厂方法模式(Factory Method)**:用于处理不同类型的对象创建过程,提供了一种接口来创建一系列相关或...

    简单工厂模式

    简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要解决对象的创建问题,降低了系统与具体创建对象之间的耦合度。在这个设计模式课程资料中,我们将使用Java语言来阐述和实现简单工厂模式,并在...

    设计模式 t01SimpleFactory

    "t01SimpleFactory"指的是简单工厂(Simple Factory)设计模式,它是创建型设计模式之一。 简单工厂模式的核心思想是通过一个公共的工厂类来创建对象,这个工厂类负责实例化客户所需的对象,客户只需要知道具体的...

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

    - 在`SimpleFactory`文件中,我们可以看到一个简单的工厂类,它根据输入类型创建相应的对象。这种模式适用于对象种类较少且不常变动的情况。 2. **普通工厂模式**(工厂方法模式): - 工厂方法模式将对象的创建...

    设计模式之Factory

    Factory模式通常分为简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)三种主要类型。 1. **简单工厂**:这是最简单的形式,它包含一个静态方法,根据传入的参数返回特定类型...

    反射简单工厂模式工厂模式

    `simplefactory`文件可能包含一个简单的工厂类,它负责根据输入条件(如参数)返回相应类型的实例。这种模式将对象的创建与使用分离,使得客户端代码无需关注具体对象的创建过程,从而提高了代码的可读性和可维护性...

    工厂模式(Factory)

    1. **简单工厂模式(Simple Factory Pattern)**:由一个静态方法来创建产品对象,它是最简单的工厂模式形式,但不利于扩展,因为静态方法不能被继承。 2. **工厂方法模式(Factory Method Pattern)**:定义一个...

    简单工厂模式应用

    简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种类型的设计模式属于类创建模式,因为工厂类是基于类的。在简单工厂模式中,一个工厂类根据传入的参数来决定创建...

    simplefactory.zip

    在我们的“simplefactory.zip”文件中,我们可以看到一个简单的工厂模式实现示例。这个例子可能包括以下几个部分: - 一个接口,例如`Product`,定义了产品类的基本行为。 - 若干个实现`Product`接口的具体产品类,...

Global site tag (gtag.js) - Google Analytics