今天学习了一下抽象工厂模式,在这里总结一下学习的东西。
抽象共工厂模式和简单工厂模式,工厂方法模式都是对象的创建模式。它是工厂方法模式的的进一步推广。
说到抽象工厂模式,就不得不提“产品族”的概念。产品族(Product Family)是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如学校的牛肉面,一食堂,二食堂都有买牛肉面的。牛肉面就是一个产品族。在工厂方法模式中,牛肉面就需要2个工厂来实例化,这显然效率不高。那么是否可以使用一个等级结构来处理这种产品族的创建呢?当然可以!抽象工厂模式就是为了解决这个问题而总结出来的,而且这正是抽象工厂模式的好处。
比如现在有一食堂,二食堂。他们同时都卖牛肉面和炒面。
工厂接口:
package a03;
/** *//**
* 工厂接口
* @author EndLess_sin
*
*/
public interface creator ...{
public product factoryA();
public product factoryB();
}
工厂实现类:
package a03;
/**//**
* 工厂实现类
* @author EndLess_sin
*
*/
public class firstCanteen implements creator...{

public product factoryA()...{//一食堂牛肉面
return new beefNoodleSoup1();
}

public product factoryB()...{//二食堂牛肉面
return new beefNoodleSoup2();
}
}

package a03;
/**//**
* 工厂实现类
* @author EndLess_sin
*
*/
public class secondCanteen implements creator...{

public product factoryA()...{//一食堂炒面
return new friedNoodle1();
}

public product factoryB()...{//二食堂炒面
return new friedNoodle2();
}
}
产品接口:
package a03;
/** *//**
* 产品接口
* @author EndLess_sin
*
*/
public interface product ...{
public void Tasting();
}
产品实现类:
package a03;
/** *//**
* 产品实现类,一食堂牛肉面
* @author EndLess_sin
*
*/
public class beefNoodleSoup1 implements product...{

public void Tasting()...{
System.out.print("一食堂牛肉面 ");
}
}

package a03;
/** *//**
* 产品实现类,二食堂牛肉面
* @author EndLess_sin
*
*/
public class beefNoodleSoup2 implements product...{

public void Tasting()...{
System.out.print("二食堂牛肉面 ");
}
}

package a03;
/** *//**
* 产品实现类,一食堂炒面
* @author EndLess_sin
*
*/
public class friedNoodle1 implements product...{

public void Tasting()...{
System.out.print("一食堂炒面 ");
}
}

package a03;
/** *//**
* 产品实现类,二食堂炒面
* @author EndLess_sin
*
*/
public class friedNoodle2 implements product...{

public void Tasting()...{
System.out.print("二食堂炒面 ");
}
}
客户端调用:
firstCanteen fc = new firstCanteen();
fc.factoryA().Tasting();
fc.factoryB().Tasting();
secondCanteen sc = new secondCanteen();
sc.factoryA().Tasting();
sc.factoryB().Tasting();抽象工厂模式的好处在于增加新的产品族的时候,只需要象系统中加入新的具体工厂类就可以了,不用修改已有的工厂角色或者产品角色,在这里,是支持“开--闭”原则的。缺点是增加新的产品等级结构的时候,就得修改所有的工厂角色,给每个工厂类增加一个新的工厂方法,这显然违背了“开--闭”原则。
发表于 @ 2007年06月25日 21:39:00 | 评论( loading... ) | 举报| 收藏