`

工厂模式理解

阅读更多
原帖见:http://www.iteye.com/topic/18648?page=2

工厂模式是最重要的模式,因为大多数模式都需要用到工厂模式。如果不能正确的运用工厂模式,那么可以说无法成为合格的架构师。
多数设计模式的内容讲解的都是如何设计接口。
接口如何产生呢?如果在客户代码(类库的使用者称之为客户)中直接使用具体类,那么就失去了接口的意义。因为接口的使用目的,就是要降低客户对具体类的依赖程度。如果在客户代码中直接使用接口,那么就造成了客户对具体类名称的依赖。(客户最终需要以某种方式指明所需要的具体类,如配置文件或代码,但是只需要指出一次,所以说降低对具体类的依赖程度)。要使客户代码不依赖具体类,唯一的方法,就是让客户代码不依赖具体类的部分不知道具体类的名称。知道具体类名称的部分,仅仅是配置部分。(配置文件或者配置代码)。
依赖不可能完全消除,除非二者毫无联系。但是可以将这种依赖的程度降到最低。
既然不能直接创建具体类,那么就需要通过一个创建者类来创建接口的实现类。这样就产生了工厂类。
那么现在已经知道工厂类存在的理由,抽象创建接口的过程。
这样,就可以使用简单工厂。
简单工厂,一般是两级结构。工厂类创建接口。
随着接口创建复杂性的增强,可能在接口创建的过程中,一个创建者类,无法承担创建所有的接口类的职责。
可能会有这样的情况,我们定义了一个接口,有6个实现类分别是123456号。但是,这六个实现类不可能用一个工厂创建出来,因为123号是windows下的实现,而456号是linux上的实现。(假设我们使用的语言不是广大人民群众热爱的java语言),那么这个时候,我还需要客户方用相同的方式来创建这个借口,而不是在代码中到处写

Java代码
if (操作系统=="windows"){  
  ....  
}else{  
  ....  

if (操作系统=="windows"){
  .....
}else{
  .....
}
那样就太麻烦了。设计模式就是为了减少麻烦,而不是什么别的废话,比如什么太极八卦、天人合一、面向xx之类的。因为怕麻烦,所以搞出设计模式这个咚咚减少麻烦。如果你发现用了设计模式更麻烦了,那么肯定是你用错了。
这个时候为了省事,我就把工厂也抽象成一个接口(因为我有两个相似的工厂,如果只有一个,我还废话什么呢),这样就成了工厂方法。
当然,既然工厂方法成了一个接口,那么当然也需要用一个工厂来创建它。这个时候,创建是三级结构,简单工厂(此时是工厂的工厂)创建工厂接口(本来是个类,现在因为进一步的抽象,成为接口了),工厂接口创建产品。
过了一段时间,随着我们的工厂业务不断发展,我们有了很多产品。
比如,我们有锤子和钉子两种产品。这两种产品都有windows品牌和linux品牌的。我们给锤子和钉子各自定义了一个创建的接口。

Java代码
interface 锤子工厂{  
  造锤子();  
}  
interface 钉子工厂{  
  造钉子();;  

可是,我们发现某些用户,用windows的锤子去敲linux的钉子,从而把程序敲出了bug。这当然是我们的错误,因为我们违反了一条金科玉律:
要想使你的程序稳定运行,你假设用户是猪。
所以,我们把锤子和钉子的工厂合并,让一个工厂只能造出配套的锤子和钉子,这样猪就没有犯错误的机会了。
于是我们搞出一个抽象工厂:
interface 铁匠铺{
  造锤子();
  造钉子();
}
当然,这个铁匠铺是个接口,所以同样需要用一个工厂来创建它。所以,这个时候,工厂还是三级结构。
我们的工厂,业务很多,而且产品一般都是配套使用的(这样可以多骗点钱),所以,我们大多数情况下,都是使用抽象工厂和简单工厂。简单工厂用来创建工厂,抽象工厂创建产品。
工厂的作用,就是创建接口。
其实我们不知道什么是设计模式,我们只是怕麻烦。什么是麻烦呢?
我们觉得把同样的代码写两遍就非常麻烦。所以,我们宁可多写几句,也要解决麻烦。猪不怕麻烦,可以日复一日的重复相同的事情,可是我们不是猪。
分享到:
评论

相关推荐

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    通过学习和理解这三种工厂模式,开发者可以更好地组织代码,降低模块间的耦合,提高软件的可维护性和可扩展性。在实际开发过程中,根据项目需求和产品结构选择合适的工厂模式,能够有效地提高代码质量。

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

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

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

    这些工厂模式的实现文件("工厂模式")可以作为学习和理解设计模式的实例。通过阅读和分析这些代码,你可以深入理解如何在C++中应用这些模式,以及它们在实际项目中的价值。此外,这些模式不仅限于C++,在Java、...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、...理解并合理运用抽象工厂模式,可以提升软件架构的质量,降低系统维护的成本。

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

    总的来说,这个项目为学习和理解单例模式和工厂模式在实际开发中的应用提供了一个很好的示例。通过结合这两种模式,可以构建出既保证了对象唯一性,又能灵活应对不同产品创建需求的系统。对于Java开发者来说,深入...

    几种设计模式的理解设计模式理解

    以下是对几种设计模式的详细理解和应用。 1. 工厂模式 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在这个模式中,一个工厂类负责创建对象,而客户端无需知道创建的具体过程。工厂类可以根据...

    深入了解工厂模式&工厂方法&抽象工厂

    工厂模式是一种常用的设计模式,主要用于在代码中创建对象。它将对象的创建过程封装起来,使得客户端无需关心具体的实现细节,只需通过工厂方法获取所需...理解和掌握这三种工厂模式对于进行高质量的软件设计至关重要。

    工厂模式源代码

    在描述中提到的文章《工厂模式的实践与解析》中,作者fanweiwei分享了他对工厂模式的理解和应用实例。文章可能涵盖了工厂模式的基本概念、分类以及如何在实际编程中运用。通常,工厂模式有三种主要类型:简单工厂...

    抽象工厂模式+工厂方法模式+策略模式+类图实现手机加工厂

    本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...

    导航进入工厂模式的方法

    工厂模式,也称为工程模式或调试模式,是制造商为了测试和调整设备功能而设置的一种特殊模式。在这个模式下,用户可以访问和修改通常隐藏的高级设置,包括地图数据、系统参数以及硬件诊断。下面我们将详细介绍如何...

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

    **简单工厂模式**是软件设计模式中的一种,属于创建型模式。在Java编程中,它是一种用于创建对象的简便方法,将对象的实例化过程封装到一...理解并合理运用简单工厂模式,能够帮助我们编写出更加灵活、易于维护的代码。

    酷派各种机型进工程模式方法

    在智能手机领域,酷派作为国内知名的手机品牌,其设备拥有丰富的功能和自定义选项。...因此,用户在探索工程模式时,应确保自己理解每个选项的含义和可能的影响。如果不确定,最好寻求专业人员的帮助。

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

    源码分析是理解设计模式的关键步骤,因为通过阅读和调试源码,我们可以深入理解模式的内部工作原理,并将其应用到自己的项目中。在给定的"设计模式源码"文件中,你将有机会亲自查看和学习这些模式的具体实现,进一步...

    设计模式 工厂模式(附源码)

    工厂模式是一种常用的设计模式,它是创建型...学习设计模式,尤其是工厂模式,对于提升C#编程技能、理解和设计更高质量的软件系统至关重要。通过实践和理解这些模式,你将能够编写出更加灵活、可扩展和易于维护的代码。

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

    在软件设计模式中,工厂模式是一种非常基础且实用的模式,它主要用来解决对象创建的问题,使得代码在面对多种产品类时保持灵活和解耦。...理解并恰当运用这三种工厂模式,可以显著提高软件的可维护性和可扩展性。

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

    在软件设计模式中,工厂模式是一种非常常用的行为型模式,它的主要目的是为了隔离对象的创建过程,使得客户端代码不直接创建对象,而是通过一个...阅读并理解这些代码有助于深入理解工厂模式及其在Java编程中的应用。

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

    在项目中,`src`目录可能包含了这些设计模式的源码示例,可以用来学习和理解如何实际应用单例模式和工厂模式。通过阅读和分析这些代码,你可以更深入地理解这两种模式的实现细节及其在实际开发中的作用。同时,也...

    抽象工厂模式+反射技术(抽象工厂模式+简单工厂模式)

    在软件工程中,当系统需要在运行时选择不同的产品族时,或者想要隔离具体产品的实现细节时,抽象工厂模式就显得尤为重要。 首先,我们来看一下“抽象工厂模式+反射技术”。在Java或其他面向对象的语言中,反射是一...

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

    通过查看这些源码,我们可以学习如何在实际项目中应用工厂模式,理解其背后的意图和实现方式,从而提升我们的编程技能和设计能力。对于初学者和有经验的开发者来说,这些都是非常宝贵的参考资料。

    工厂方法模式和抽象工厂模式

    在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...

Global site tag (gtag.js) - Google Analytics