早上起来学习了工厂方法模式。工厂方法模式是类的创建模式,又称多态性工厂(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... ) | 举报| 收藏