技术开发 频道

GOF设计模式 --- 工厂模式

二、孔孟之道:书接上文,言归正传

    上面所讲的无非是一种方法。一种采用工厂的模式来生产产品的方法。我之所以要在这里强调,因为,我们要学习的是这种模式,而不要把模式固定在某些名词上。有可能,工厂,也是一种产品。

    现在,抛开现实中的理论(好多大白话),从程序设计的角度去想工厂模式。
    工厂模式是创建型模式里面主要的模式之一,它的思想是把类创建的逻辑和过程封装起来,隔离客户端。我们通常创建类的实例都是直接调用其构造方法,这是最常用的方法,但是当类的体系变得复杂,类的创建逻辑变得复杂的时候就需要在客户端使用大量的判断代码,而且使用这些类越多,这样的代码会充斥到系统各个地方。所以把类的创建过程独立开来,用另外的一个类来负责,这就引入了工厂模式。根据这个工厂类的复杂程度,又分为工厂方法和抽象工厂模式。

工厂方法模式(Factory Mehod Pattern)   简单工厂模式,一个工厂生产多个产品;
抽象工厂模式(Abstract Factory Pattern)  更复杂的工厂模式,产生多个工厂;

    网上看见有前辈把工厂模式分成三种,还有一个简单工厂模式。我感觉,无所谓。如果让我来写,很有可能就是一种模式,我都叫它抽象工厂模式。只不过在遇到不同程度的问题时。这种模式的使用形式有些变化而已。至少我现在是这样理解的。

    那我就接合应用来说一下我理解的工厂模式。

    比如,我们要建立一个有XX效果的类Something。这个XX效果会影响到Something的构造过程。原则上讲,XX并不属于Something中的固有属性,只能说XX是Something的一种特殊属性或者是一种特殊效果。我们用工厂模式来构造一下。

    首先引入一个工厂接口,此接口定义了Something的创建方法(也可以不定义在这里,在子工厂中实现)。为了生产XX的Something,特别为其实现一个特定的子工厂类。这个子工厂是专门用来生产具有XX效果的Something的。(同样,我们也可以再实现一个子工厂,专门用来生产具有YY效果的Something。)这样就把不同效果的Something创建方法隔离开来。每种效果和Something的构造过程是封装在一起。我们可以根据情况来实现不同效果下的Something。

    总之就是不能把创建逻辑放在使用的客户端。就是把创建对象的逻辑过程和使用过程放在一起(也就是放在客户端)。或者说,不要让使用产品的人看见产品是如何产生的。使用者看见的应该只是产品工厂和工厂出售产品的“受付”(销售处)。使用者只要走到工厂的门口,而不要让使用者走到生产线去买东西。为什么这样做呢?想想现实中为什么这样做呢?也许就会理解了。如果一堆人排着大队在生产线旁买东西。生产出一个卖一个。不乱吗?一,对于产品的生产方来说,这样做太危险了,很难预测消费者会无意中对生产线造成多打的影响。而且不方便管理。二,对于使用者来说,也不方便购买。用户希望的就是看到一个销售窗口,我告诉你买什么,你给我什么产品就够了。没必要看见产品是如何产生的。

    千万不要让用户到生产线去买东西!会很危险。

0
相关文章