`
Irving_wei
  • 浏览: 132633 次
  • 性别: Icon_minigender_1
  • 来自: Heaven
社区版块
存档分类
最新评论

对Singleton模式和Factory模式的理解

阅读更多

  昨天晚上和毛驴讨论到很晚,关于单态模式和工厂模式。

  首先来回忆一下,什么是单态模式和工厂模式。单态模式说得明了一点就是:一个类产生的所有对象都是同一个。为什么要将一个类的对象都限制成一个呢?这是为了在调用这个类的方法的时候,避免在Web开发过程中产生过多的对象,频繁的调用构造方法,然后再调用对象的销毁方法,这样浪费了容器的很多资源。工厂模式,顾名思义就是将许多类放到一个类Factory中进行“集中实例化”,就像是一个工厂一样,以后要是具体的某一个类A要用到其中的一个类B的实例,就可以直接实例化 Factory的一个对象,然后通过这个对象来调用类Factory中获取B类实例的方法获得B的实例,而不需要在自己的类中去new类B的对象。要是A类只用到了少量几个类,这样的做法似乎不是很奏效,但是如果A用到了大部分的类,而且个数是比较多的,这样的情况下,就只需要在A类中new一个Factory的实例,然后就可以很容易获取到它所需要的各个类的实例了。因为Factory中已经包含了所有类的实例获取方法,这也许就是“工厂”的由来吧。

   如何实现“单态”?我们知道,当一个类的构造器的可见度设置成“private”的时候,就不能在类外调用它的构造方法了。就是说只能在类的内部调用它的方法,而在类内部调用构造方法,调用几次构造方法是我们可以控制的。在类的内部设置一个可以获得类实例的方法来获得类的实例,为了使类的对象是唯一的,也就是说是满足单态模式的目的的,就应该将返回的类对象设置成一个static类型的,接下来在类的实现过程中,要判断是否已经存在了一个类的对象,要是存在就直接返回对象不调用构造方法,要是不存在就调用构造方法,生成一实例。这样,在类外调用它的时候,不论调用多少次,都是返回同一个实例。

   Spring对工厂模式的实现,是通过配置文件和IoC容器来完成的。配置文件给每个bean创建了一个ID,这是唯一的,就是通过这个ID来告诉IoC要调用哪个bean的构造方法,而调用构造方法也不是我们要操心的问题,我们只要使用IoC给我们创建的实例就足够了。这样看来,IoC容器是一个实现了Factory设计模式的巨大Bean工厂。

分享到:
评论

相关推荐

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...

    C#设计模式之Singleton模式

    《C#设计模式之Singleton模式详解》 Singleton模式是软件设计模式中的一种基础模式,它在众多设计模式中占有重要地位,尤其在C#编程中经常被应用。Singleton模式的主要目的是确保一个类只有一个实例,并提供一个...

    人人都懂设计模式 人人都懂设计模式

    创建型模式主要解决对象的创建问题,例如 Singleton 模式和 Factory 模式。结构型模式主要解决结构的设计问题,例如 Bridge 模式和 Composite 模式。行为型模式主要解决行为的实现问题,例如 Observer 模式和 ...

    C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式)

    在软件开发中,设计模式是一种经过验证的、通用的解决方案,用于解决常见编程问题。"Singleton"模式是其中一种创建型设计模式,它确保一个...理解并熟练运用Singleton模式,可以帮助我们编写更加高效、易于维护的代码。

    设计模式精解-GoF 23种设计模式解析

    ### 设计模式精解-GoF 23种设计模式解析 ...理解和掌握这些模式对于提高软件设计的质量、提高代码的可读性和可维护性都具有重要意义。在实际项目中,灵活运用这些设计模式能够帮助我们更好地应对各种复杂的编程挑战。

    JavaScript设计模式与开发实践.pdf

    第二部分是核心部分,通过一步步完善的代码示例,由浅入深地讲解了16个设计模式,包括 singleton模式、Factory模式、Abstract Factory模式、Builder模式、Prototype模式、Adapter模式、Bridge模式、Composite模式、...

    创建型模式(除singleton)外的四种模式简单实例

    1. **Abstract Factory模式**: - 抽象工厂模式是一种为一个产品族提供对象的接口,它不指定具体的产品类,而是定义了创建一系列相关或相互依赖对象的接口。这使得客户端可以在不关心具体实现的情况下,使用不同的...

    24种设计模式以及混合设计模式

    设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而形成的一套最佳实践。在本文中,我们将深入探讨24种设计模式...对于任何有志于提升软件开发水平的人来说,理解和掌握设计模式都是至关重要的。

    23种面向对象设计模式

    面向对象设计模式是软件开发中的一种...无论是在Java还是C++这样的面向对象语言中,理解和掌握这些设计模式都对提升软件质量至关重要。通过深入学习并应用这些模式,开发者可以更好地应对软件项目中的复杂性和变化。

    设计模式(包含5个设计模式)含源代码报告.rar

    这个压缩包文件"设计模式(包含5个设计模式)含源代码报告.rar"显然是一份宝贵的资源,它涵盖了五个核心的设计模式,并附带了详细的类图、源代码以及文档报告,这对于学习和理解设计模式至关重要。 首先,我们要探讨...

    Head First设计模式和HeadFirst in java 源码以及23种设计模式关系图

    创建型模式关注对象的创建,如单例模式(Singleton)、工厂模式(Factory Method)、抽象工厂模式(Abstract Factory)和建造者模式(Builder)等,它们主要解决了对象实例化过程中的各种问题。结构型模式则涉及如何...

    结城浩《图解设计模式》笔记

    本笔记主要讲述了设计模式的基本概念和应用,包括 Iterator 模式、Adapter 模式、TemplateMethod 模式、FactoryMethod 模式和 Singleton 模式等。通过对这些设计模式的详细解释和示例代码的分析,我们可以更好地理解...

    设计模式相关文档和部分模式源代码

    创建型模式关注对象的创建,如单例模式(Singleton)、工厂模式(Factory Method)和抽象工厂模式(Abstract Factory),它们提供了一种创建对象的最佳方式,减少了代码之间的耦合。结构型模式处理类与类的关系,如...

    设计模式 让你轻松理解设计模式,提高开发效率

    ### 设计模式:让你轻松理解设计模式,提高开发效率 #### 概述 设计模式是软件工程领域中一种被广泛采用的设计思想和技术方法,它帮助开发者解决常见的编程问题,并优化程序结构,使得代码更加灵活、可扩展且易于...

    设计模式那点事

    《设计模式那点事》这本书的PPT为我们提供了一种深入理解和学习设计模式的途径。在这里,我们将深入探讨设计模式的核心概念、分类以及它们在实际开发中的应用。 首先,设计模式基于面向对象编程思想,其核心目标是...

    吉大软件设计模式ppt、示例代码及平时作业

    这个压缩包“设计模式2018”可能包含了关于设计模式的PPT讲解、示例代码以及学生的平时作业,这些都是理解和掌握设计模式的宝贵资源。 设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。创建型模式...

    c#设计模式

    通过学习和实践这些设计模式,C#开发者可以更好地理解和解决复杂的软件设计问题,提高代码质量,同时也为团队协作提供了通用的语言。在实际项目中,可以根据需求灵活选用适合的设计模式,从而实现高效、可扩展和易于...

    C#经典设计模式及代码示例

    1. 创建型模式:这类模式主要关注对象的创建过程,如单例模式(Singleton)、工厂模式(Factory Method)和抽象工厂模式(Abstract Factory)。例如,单例模式确保一个类只有一个实例,并提供全局访问点,这对于管理...

    深入浅出设计模式附书源码Java版源码

    1. **创建型模式**:这类模式关注对象的创建,如单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。这些模式提供了一种在不知道具体...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    1. **创建型模式**:包括单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype)。这些模式关注对象的创建过程,使得代码更加灵活,易于管理和扩展。...

Global site tag (gtag.js) - Google Analytics