原创  抽象工厂(Abstract Factory)模式的体会 收藏

      今天学习了一下抽象工厂模式,在这里总结一下学习的东西。

      抽象共工厂模式和简单工厂模式,工厂方法模式都是对象的创建模式。它是工厂方法模式的的进一步推广。

     说到抽象工厂模式,就不得不提“产品族”的概念。产品族(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... ) | 编辑| 举报| 收藏

旧一篇:工厂方法(Factory Method)模式的体会 | 新一篇:我知道,你们正看着我呢

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