客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

     下面用具体的实例来讲解简单工厂模式,假设有一个汽车销售工厂,这个工厂销售各种汽车,如宝马、福特等,我们先建立汽车产品类

// 汽车抽象类。
class Car
{
public:
    
virtual void Sale() = 0;
}; 

// 福特汽车子类。
class FordCar: public Car
{
    
void Sale()
    {
        printf(
"Sale Ford car!\n");
    }
}; 

// 宝马汽车子类。
class BmwCar: public Car
{
    
void Sale()
    {
        printf(
"Sale BMW car!\n");
    }
};

然后建立汽车类工厂CarFactory

// 汽车工厂类。
class CarFactory
{
public:
    
static Car *SaleCar(const char *prmString);
}; 

Car 
* CarFactory::SaleCar( const char *prmString )
{
    
if (stricmp(prmString, "bmw"== 0)
    {
        
return new FordCar(); 
    }
    
else if (stricmp(prmString, "ford"== 0)
    {
        
return new BmwCar();
    }
    
else
    {
        
return NULL;
    }        
}

    这样我们就可以通过给工厂打个电话:“我要销售宝马汽车”,工厂接到电话后就会把宝马给你开过来了。

void main()
{
    Car 
*car1 = CarFactory::SaleCar("bmw");
    car1
->Sale();
    
    Car 
*car2 = CarFactory::SaleCar("ford");
    car2
->Sale();
    
    delete car1;
    delete car2;
}
posted on 2009-03-13 17:49  无心吧  阅读(200)  评论(0编辑  收藏  举报