`

工厂模式的好处

阅读更多

工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A(). 工厂模式也是用来创建实例对象的,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

类Sample为例,要创建Sample的实例对象:

Sample sample=new Sample();
可是,实际情况是,通常我们都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等

首先,我们想到的是,可以使用Sample的构造函数,这样生成实例就写成:

Sample sample=new Sample(参数);

但是,如果创建sample实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码很难看了

初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。

我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。

你想如果有多个类似的类,我们就需要实例化出来多个类。这样代码管理起来就太复杂了。
这个时候你就可以采用工厂方法来封装这个问题。
不能再用上面简单new Sample(参数)。还有,如果Sample有个继承如MySample, 按照面向接口编程,我们需要将Sample抽象成一个接口.现在Sample是接口,有两个子类MySample 和HisSample

Sample mysample=new MySample();
Sample hissample=new HisSample();
采用工厂封装:

public class Factory{

  public static Sample creator(int which){

  //getClass 产生Sample 一般可使用动态类装载装入类。
  if (which==1)
    return new SampleA();
  else if (which==2)
    return new SampleB();

  }

}

那么在你的程序中,如果要实例化Sample时.就使用

Sample sampleA=Factory.creator(1);


举个更实际的例子,比如你写了个应用,里面用到了数据库的封装,你的应用可以今后需要在不同的数据库环境下运行,可能是oracle,db2,sql server等,那么连接数据库的代码是不一样的,你用传统的方法,就不得不进行代码修改来适应不同的环境,非常麻烦,但是如果你采用工厂类的话,将各种可能的数据库连接全部实现在工厂类里面,通过你配置文件的修改来达到连接的是不同的数据库,那么你今后做迁移的时候代码就不用进行修改了。

我通常都是用xml的配置文件配置许多类型的数据库连接,非常的方便。PS:工厂模式在这方面的使用较多。

分享到:
评论

相关推荐

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

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    AOC电视进入酒店模式和工厂模式的方法

    测试机型:32m3095(其它机型未试,大同小异,自行测试) 测试时间:2022.06.15 进入酒店模式好处:可以设置...进入工厂模式好处:可以设置不正常的颜色,声音。恢复系统默认设置。好多功能,是英文的,我看不懂。

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

    "设计模式单例模式和工厂模式综合应用"的主题聚焦于两种常用的设计模式:单例模式和工厂模式,并探讨它们如何协同工作来实现高效、灵活的代码结构。这个主题尤其适用于Java编程语言,因为Java的面向对象特性使得设计...

    简单工厂模式、工厂模式、抽象工厂模式案例(C++实现)

    在软件工程中,设计模式是解决常见问题的模板或最佳实践。工厂模式是其中最常用的一种,它提供了创建对象的最佳方式。在这个压缩包中,包含了三种工厂模式的C++实现:简单工厂模式、工厂方法模式以及抽象工厂模式。...

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

    简单工厂模式的优点: 1. **隔离了类的实例化过程**,客户端无需关心如何创建对象,只需要知道产品的类型即可。 2. **提供了创建一组相关或相互依赖对象的接口,而无需指定它们具体的类**。 3. **扩展性较好**,如果...

    工厂模式源代码

    这样做的好处在于,客户端代码不必了解具体的产品实现细节,只需知道如何调用工厂即可得到所需产品,同时也为系统扩展提供了便利。 在描述中提到的文章《工厂模式的实践与解析》中,作者fanweiwei分享了他对工厂...

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

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

    设计模式之单例模式(结合工厂模式)

    DCL模式结合了两者优点,既保证了线程安全,又实现了延迟初始化。 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建对象时,我们不会对客户端暴露创建逻辑,而是提供一个接口...

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

    在软件设计模式中,工厂模式是一种非常基础且实用的模式,它主要用来解决对象创建的问题,使得代码在面对多种产品类时保持灵活和解耦。本文将深入探讨三种工厂模式:简单工厂模式、工厂方法模式以及抽象工厂模式,并...

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

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

    设计模式-工厂方法模式

    在软件工程中,设计模式被广泛应用于解决各种常见的编程问题。工厂方法模式作为创建型模式中的一种,提供了一种创建对象的优雅方式,它不仅使对象的创建与使用分离,还极大地提高了系统的扩展性和灵活性。本文将深入...

    uml 文档 简单工厂模式

    简单工厂模式的优点是: * 解耦合:客户端不需要知道具体的产品类,只需要知道工厂类。 * 扩展性好:可以轻松地添加新产品类。 简单工厂模式的缺点是: * 工厂类需要知道所有的产品类,这增加了工厂类的复杂度。 ...

    设计模式_工厂模式

    工厂模式的优点在于: 1. **封装变化**:客户端不再直接创建对象,而是通过工厂,减少了客户端与具体产品类之间的耦合。 2. **易于扩展**:添加新产品类型只需扩展工厂,而无需修改已有代码。 3. **提供统一的创建...

    Java中工厂模式案例

    简单工厂模式的优点在于客户端无需知道具体产品的实现细节,只需要知道工厂即可。但缺点是当产品种类增加时,工厂类会变得庞大,违背了“开闭原则”。 **2. 工厂方法模式(Factory Method)** 相比于简单工厂模式,...

    简单工厂模式的优点缺点

    在软件工程中,当系统需要创建的对象具有共性,并且这些对象的创建逻辑相对固定时,可以考虑使用简单工厂模式。该模式将对象的创建过程封装在一个单独的工厂类中,使得客户端代码无需直接实例化具体的产品对象,而是...

    简单工厂模式VS策略模式小应用

    这种模式的优点在于降低了客户端代码与具体产品类之间的耦合度,因为客户端只需要知道产品的接口,而不必关心它是如何创建的。然而,简单工厂模式的缺点也很明显,当产品种类增加时,工厂类可能会变得过于复杂,且不...

    设计模式之一 3种工厂模式解析源码

    在软件设计领域,工厂模式是一种广泛应用的设计模式,它属于创建型模式,主要目的是为了封装对象的创建过程,使得客户端代码可以使用一个统一的接口来创建不同的对象,而无需关心具体的实现细节。工厂模式分为三种...

    抽象工厂模式简单小例子

    #### 六、抽象工厂模式优点 1. **方便创建系列产品**:抽象工厂模式可以方便地创建一系列相关的产品,使得代码更加整洁、易于维护。 2. **降低系统耦合度**:由于工厂和产品都是通过接口进行通信的,因此可以很容易...

    设计模式之三种工厂模式

    在软件工程领域,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。本篇将详细讲解三种工厂模式:简单工厂模式、工厂方法模式和...

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

    然而,简单工厂模式的优点是结构简单,易于理解和实现。 综上所述,这些设计模式在实际项目中扮演着至关重要的角色。理解并熟练地应用这些模式,可以极大地提高代码的可读性、可维护性和复用性。MVC模式使得用户...

Global site tag (gtag.js) - Google Analytics