`

工厂模式的好处(转)

阅读更多
工厂模式的好处(转)
文章分类:Java编程
工厂模式就相当于创建实例对象的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:工厂模式在这方面的使用较多。

分享到:
评论

相关推荐

    qt5编写的使用模板类工厂模式画图程序

    本示例中的"qt5编写的使用模板类工厂模式画图程序"聚焦于Qt5库的应用,结合了工厂模式和模板视图概念来高效地创建和管理图形界面中的元素。下面将详细介绍这两个关键知识点。 **工厂模式** 工厂模式是一种创建型...

    java 设计模式之工厂模式

    本篇文章将深入探讨Java中的一个基础设计模式——工厂模式,以及它的一些变体,如简单工厂模式和抽象工厂模式,并结合Java的反射机制进行讲解。 首先,工厂模式的核心思想是提供一个创建对象的接口,但让实现这个...

    ASP。NET工厂模式网上书店(整站系统)

    【ASP.NET工厂模式网上书店(整站系统)】是一个基于ASP.NET技术开发的在线图书销售平台,虽然在描述中提到部分功能尚未完善,但整体设计思路清晰,易于理解。此项目应用了工厂模式,这是一种常用的软件设计模式,...

    android 设计模式之Listview不同类型Item利用工厂模式的复用

    在"android 设计模式之Listview不同类型Item利用工厂模式的复用"这一主题中,我们主要探讨如何应用工厂模式来解决ListView中多类型Item的问题。首先,我们需要定义一个接口或抽象类,如`BaseItem`,它包含了所有Item...

    设计模式之里氏转换原则

    - 抽象工厂模式:提供了创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类,子类可以扩展创建的产品,但不影响原有接口的使用。 6. **其他面向对象原则与LSP的关系:** - 开闭原则(Open-Closed ...

    简单工厂模式

    简单工厂模式是软件设计模式中的一种基础构造模式,它属于创建型模式,主要用来封装对象的创建过程。这种模式提供一个工厂类,根据传入的参数来决定创建哪个类的实例,用户无需直接与具体的类打交道,而是通过工厂类...

    工厂设计模式.pdf

    【工厂模式】是一种常用的设计模式,其主要目的是为了替换直接使用`new`关键字来创建对象的方式。工厂模式通过定义一个接口或抽象类,由其他类实现这个接口或继承这个抽象类,然后创建一个工厂类来负责创建这些实现...

    抽象工厂 SQL 和Access 利用泛型读取表中数据 WCF发布出去

    抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。在这个场景中,"抽象工厂 SQL 和 Access" 指的是利用抽象工厂模式来创建与SQL Server和Microsoft Access...

    设计模式精心总结

    2. 抽象工厂模式(Abstract Factory):抽象工厂模式提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 3. 单例模式(Singleton):单例模式确保一个类只有一个实例,并提供一个全局访问点...

    PHP工厂模式简单实现方法示例

    工厂模式是设计模式中的一种,它提供了一种创建对象的最佳方式。在PHP中,工厂模式主要用来抽象创建对象的过程,使得客户端(调用者)无需关心对象的具体创建过程,只需要知道如何通过工厂获取所需的对象即可。这样...

    C++设计模式,设计模式,模式

    创建型模式关注对象的创建,如工厂模式、单例模式、抽象工厂模式等,它们处理的是如何实例化对象以及控制对象间的依赖关系。结构型模式涉及如何组合对象和类以构建更复杂的结构,比如适配器模式、装饰器模式、代理...

    java 设计模式 java pattern

    除了工厂模式和建造者模式,还有其他的设计模式,如单例模式、抽象工厂模式、原型模式等,它们各自解决不同的问题,共同构成了设计模式的体系。理解并熟练运用这些模式,可以显著提升Java开发者的专业素养,帮助他们...

    JAVA的21种设计模式

    1. **工厂模式**: 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它不会直接实例化对象,而是调用一个工厂对象来创建。这样做的好处是,可以将...

    设计模式特点

    抽象工厂模式为创建一系列相关或相互依赖的对象提供了一个接口,但不需要明确指定具体的类。这种模式通常用于构建一组相关的对象,而不关心它们的具体实现。 **好处:** 1. **良好的封装性**:与工厂方法模式类似,...

    JAVA常用设计模式

    在工厂模式中,当创建对象时,我们不会对客户端暴露创建逻辑,而是提供一个接口让客户端通过调用工厂方法来获取对象。这样做的好处在于,如果产品类型发生变化,只需要修改工厂类,而不需要修改使用这些产品类的...

    常用设计模式例子.zip

    2. **抽象工厂模式**:抽象工厂模式是工厂模式的扩展,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在不同的平台上,可以使用不同的抽象工厂来创建符合该平台特性的对象。 3. **策略...

    设计模式(Design Patterns).pdf

    - 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 - 单例模式(Singleton):保证一个类仅有一个实例,并提供一个全局访问点。 - 建造者模式...

    硬啃设计模式

    - **抽象工厂模式(Abstract Factory Pattern)**:提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。 - **建造者模式(Builder Pattern)**:将一个复杂对象的构建与其表示分离,使得同样...

    数据工厂泛型类源码

    数据工厂泛型类是软件开发中的一个重要概念,它结合了数据工厂模式和泛型编程的特点,为创建对象提供了一种灵活且类型安全的方式。在Java、C#等面向对象编程语言中,泛型类被广泛使用,以提高代码的可重用性和减少...

    23种设计模式的有趣见解

    工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在这个模式下,客户类和工厂类是分开的。当消费者需要某种产品时,只需向工厂请求即可,无需关心具体的产品实现细节。这种方式简化了消费者与产品的...

Global site tag (gtag.js) - Google Analytics