原创  工厂方法(Factory Method)模式的体会 收藏

     早上起来学习了工厂方法模式。工厂方法模式是类的创建模式,又称多态性工厂(Polymorphic Factory)模式。工厂方法模式的用意在于定义了一个创建产品对象的工厂接口,将实际创建工作推迟都了子类中。工厂模式和简单工厂模式相比较,不同的地方就是工厂模式多了一个工厂interface,将工厂也抽象出来统一管理,实际创建产品是在子类里面。

比如现在有一食堂,二食堂,一食堂卖牛肉面,二食堂卖炒面。

产品的接口类如下:

package a02;
/**
 * 产品接口
 * 
@author EndLess_sin
 *
 
*/

public interface product {
    
    
public void Tasting();
}

工厂接口:

package a02;
/**
 * 工厂接口
 * 
@author EndLess_sin
 *
 
*/

public interface creator {

    
public product factory();
}

工厂实现类:

package a02;
/**
 * 工厂实现类,一食堂
 * 
@author EndLess_sin
 *
 
*/

public class firstCanteen implements creator{

    
public product factory(){
        
        
return new beefNoodleSoup();
    }

}



package a02;
/**
 * 工厂实现类,二食堂
 * 
@author EndLess_sin
 *
 
*/

public class secondCanteen implements creator{

    
public product factory(){
        
        
return new friedNoodle();
    }

}

产品实现类:

package a02;
/**
 * 产品实现类,牛肉面
 * 
@author EndLess_sin
 *
 
*/

public class beefNoodleSoup implements product{

    
public void Tasting(){
        
        System.out.print(
"firstCanteen beefNoodleSoup Tasting  ");
        
    }

}


package a02;
/**
 * 产品实现类,炒面
 * 
@author EndLess_sin
 *
 
*/

public class friedNoodle implements product{
    
    
public void Tasting(){
        
        System.out.print(
"secondCanteen FriedNoodle Tasting  ");
        
    }

}

调用:

    firstCanteen fc = new firstCanteen();
    fc.factory().Tasting();
        
    secondCanteen sc 
= new secondCanteen();
    sc.factory().Tasting();

     产品和工厂都有了一个interface,都抽象出了一层。在简单工厂模式中,一个工厂类处于对产品实例化的中心位置上,它知道每一个产品,它决定哪一个产品类应该被实例化。优点是允许客户端向对独立与产品创建的过程,并且在引入新产品的时候无需修改客户端。缺点是如果有新的产品加入到系统中时,需要修改工厂类。但是工厂方法模式在保持简单工厂模式优点的同时,克服了简单工厂模式的缺点。在工厂方法模式,核心的工厂类不在负责所有产品的创建,而是交给子类去做。这个核心工厂类变成了抽象工厂角色,仅负责给具体工厂子类必须实现的接口。这种进一步的抽象化的结果,  在引入新的产品的时候,不用去修改原来的代码,只需要添加一个新的工厂子类和新的产品子类,实现抽象工厂和抽象产品的接口。(注意修改代码和添加新的类的区别)工厂模式之所以有一个别名叫多态性工厂模式,是因为具体工厂类都有共同的接口,或者说叫共同的抽象父类。对于增加新的产品而言,系统完全支持“开--闭”原则。

    到这里学完了2个模式了(简单工厂和工厂方法)。看书的时候,给我的感觉就是只要头脑里对java的接口和抽象类很熟悉的话,就基本可以理解书中所要表达的意思。但是发现自己对模式的理解还是处与表面的状态,没有和实际的东西结合起来,原因我觉得是见的东西太少了,做的东西也太少了。

发表于 @ 2007年06月24日 11:36:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:简单工厂(Simple Factory)模式的体会 | 新一篇:抽象工厂(Abstract Factory)模式的体会

  • 发表评论
  • 评论内容:
  •  
Copyright © Endless_sin
Powered by CSDN Blog