`

使用工厂设计模式的场景

阅读更多
创建类对象虽然可以使用new(底层也是通过反射创建对象的),但是在一些情况下使用工厂模式确实最合适的。
情况一:如果一个对象拥有很多子类,那么创建该对象的子类使用工厂模式是最合适的,不但可以面向接口的编程,为维护以及开发带来方便。
情况二:如果创建某个对象时需要进行许多额外的操作,如查询数据库然后将查询到的值赋予要创建的对象(单例初始化时使用比较多),或是需要许多额外的赋值等等。如果查看JDK源码中,会发现许多成员变量在对象构造时,通过工厂方法进行创建的。因为这些成员变量本身的创建也很复杂。不可能创建对象时,在该对象的构造方法里创建成员变量然后再赋值给该成员变量。而且使用工厂模式也提高了代码的重用性。

如果创建对象时只需要对简单的成员变量可以直接通过构造方法传入即可。
面向对象设计思想就是分派和分装。即将长代码分派分隔成段,然后对每段进行封装。这样如果需要修改只修改每段即可,而不会牵一发而动全身。一定不要将多个鸡蛋放到一个篮子里面。

工厂模式分为工厂方法(factory method)和抽象工厂(abstract factory)
区别在于被创建对象的负责程度。
如果相关联的产品只有一个,那么不需要对工厂对象进行抽象了。使用工厂方法就可以了(即返回对象,根据传入的值然后生成不同的子类)。
如果关联的产品有多个,可以将工厂类进行抽象。让具体创建业务相关类的工作交给子类实现。如工厂子类1创建产品a的x业务对象和产品b的x业务对象,工厂子类2创建产品a的y业务对象和产品b的y业务对象.这样就实现了创建对象的垂直切断(这种方式是以业务为主导的)。
使用抽象工厂时,通常创建产品a和创建产品b的方法有一定的联系,因此才将两个对象捆绑在一起,作为抽象工厂的主导元素。

实际开发中,工厂模式使用比较多,并且和动态类装作器结合到一起也是非常多。
如Jlive就是这样实现。
//这里假如生成的对象就是该类本身,借助单例模式
public class FactoryMethod{
    private static FactoryMethod instance = null;
    private static Object lock = new Object();//因为使用懒汉式,这里生产一个对象锁
     String className = "com.xxx.FactoryMethod";
    public FactoryMethod getInstance(xxxx yyy){//yyy可以是传入的条件
         if(instance == null){
          synchronized(lock){
            instance = (FactoryMethod)Class.forName (className).newInstance();
          return instance;
     }
  }
          return instance;
}
}

注意对象锁使用非常多,例如ConcrentHashMap在添加或是删除数据的时候也是对存放元素的数组对象进行的锁定。
分享到:
评论

相关推荐

    工厂设计模式代码

    工厂设计模式是软件工程中广泛使用的一种创建型设计模式,它的主要目的是为了隔离对象的创建过程,使得客户端代码不直接创建对象,而是通过一个专门的工厂类来负责对象的实例化。这种模式使得系统在面对产品扩展时...

    设计模式资料之工厂设计模式

    总结来说,这份“设计模式资料之工厂设计模式”可能会涵盖工厂模式的基本概念、分类、作用,尤其是重点讲解抽象工厂模式的原理、应用场景及实现方式。通过学习这些内容,开发者将能更好地理解和运用设计模式,提升...

    工厂设计模式

    工厂设计模式是面向对象编程中的一种经典设计模式,它的主要目的是为了解耦对象的创建与使用,使得代码更加灵活,易于扩展。工厂模式的核心思想是提供一个工厂接口或类,用于创建相关或依赖对象,而无需指定它们的...

    工厂设计模式简单实例

    工厂设计模式是面向对象编程中的一种经典设计模式,它的主要目的是为了解耦对象的创建与使用,使得系统在不关心具体实现的情况下能够灵活地创建所需的对象。在这个名为"工厂设计模式简单实例"的资料中,我们可以期待...

    设计模式:单例设计模式(全部实现方式)工厂设计模式,抽象工厂模式

    工厂设计模式是一种创建型设计模式,它的主要目标是将对象的创建和使用分离,使得代码更具有可维护性和可扩展性。该模式通常会定义一个工厂接口或抽象类,由具体的工厂类实现该接口或抽象类来创建相应的产品。工厂...

    简单工厂设计模式

    ### 简单工厂设计模式概述 简单工厂模式(Simple Factory Pattern)是设计模式中较为基础的一种模式,属于创建型模式。它通过提供一个统一的接口来创建一系列相关的或相互依赖的对象,而无需指定具体类。 #### ...

    设计模式之java工厂模式

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

    设计模式——工厂方法模式

    设计模式是一种在特定场景下解决软件设计问题的通用、可重用的解决方案,它代表了最佳实践,被广泛应用于各种编程语言中。工厂方法模式是设计模式中的一员,它的核心思想是定义一个创建对象的接口,但让子类决定实例...

    工厂设计模式附加对象池说明

    本资源包含两部分:工厂设计模式和对象池的设计与实现,主要面向Java开发者。 首先,我们来深入理解工厂设计模式。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露创建逻辑,同时允许...

    三种设计模式(简单工厂_工厂方法_抽象工厂)

    今天我们将深入探讨三种主要的设计模式:简单工厂、工厂方法和抽象工厂。 ### 简单工厂模式 简单工厂模式是一种创建型设计模式,它提供了一个静态方法来创建对象,而无需暴露创建逻辑。这个静态方法根据输入参数来...

    设计模式之工厂方法模式

    工厂方法模式是设计模式中的创建型模式之一,它在软件工程中扮演着非常重要的角色,尤其是在C#这样的面向对象编程语言中。工厂方法模式提供了一种封装对象创建过程的方法,使得具体的创建过程延迟到子类中进行,从而...

    深入浅出设计模式之工厂模式

    根据提供的标题“深入浅出设计模式之工厂模式”与描述“将《Head First 设计模式》(中文版)按章节进行了分割,每章一个文件,方便大家下载”,我们可以推测出这部分内容主要关注的是设计模式中的工厂模式。...

    工厂模式-设计模式

    总结来说,这个压缩包文件很可能会涵盖如何在电商场景下使用工厂模式和其他设计模式的知识点,包括如何定义产品接口,创建工厂类,以及如何在实际项目中灵活应用这些模式来提高代码的可扩展性和可维护性。...

    设计模式工厂方法模式PPT学习教案.pptx

    "设计模式工厂方法模式PPT学习教案" 本学习教案旨在讲解设计模式中的工厂方法模式(Factory Method),通过学习本教案,学生将掌握工厂方法模式的定义、结构、实例、分析和应用。 模式动机与定义 在软件设计中,...

    设计模式之工厂

    "工厂模式"是其中一种常用的设计模式,它提供了一种创建对象的最佳方式。在这个主题下,我们将深入探讨三种主要的工厂模式:简单工厂、工厂方法和抽象工厂。 1. **简单工厂模式**: 简单工厂模式是最基础的形式,...

    IOS 设计模式抽象工厂实例Demo

    抽象工厂模式是设计模式中的一种,尤其适用于创建一组相关或相互依赖的对象。这个实例Demo将向我们展示如何在iOS环境中应用抽象工厂模式。 抽象工厂模式的核心思想是提供一个接口,用于创建一系列相关或相互依赖的...

    c++设计模式全系列+应用场景+实例说明

    5. **策略模式(Strategy Pattern)**:策略模式是一种行为设计模式,定义了一系列算法,并使其可以相互替换,使得算法的变化独立于使用算法的客户端。 6. **适配器模式(Adapter Pattern)**:适配器模式是一种...

    java 抽象工厂设计模式 案例

    Java抽象工厂设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,一个工厂接口用于创建一系列相关的或相互依赖的对象,而无需指定它们的具体类。这种模式让代码与具体实现解耦,使得...

    java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】

    java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...

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

    虽然在某些情况下可能导致代码的可扩展性和可维护性降低,但在许多简单的应用场景中,它仍然是一个实用的设计模式。理解并合理运用简单工厂模式,能够帮助我们编写出更加灵活、易于维护的代码。

Global site tag (gtag.js) - Google Analytics