1,简单工厂模式:
实例代码:
#include <iostream>
#include <list>
#include <cassert>
#include <sstream>
#include <memory>
using namespace std;
/************************产品基类******************************/
class Pizza
{
protected:
Pizza() {}
public:
virtual ~Pizza() = 0;
string getName() const
{
return _name;
}
virtual void prepare() const
{
cout << "Preparing " << _name.c_str() << endl;
}
virtual void bake() const
{
cout << "Baking " << _name.c_str() << endl;
}
virtual void cut() const
{
cout << "Cutting " << _name.c_str() << endl;
}
public: virtual void box() const
{
cout << "Boxing " << _name.c_str() << endl;
}
string toString() const
{
// code to display pizza name and ingredients
stringstream value;
value << "---- " << _name.c_str() << " ----" << endl;
value << _dough.c_str() << endl;
value << _sauce.c_str() << endl;
for( list< string >::iterator iterator = _toppings.begin(); _toppings.end() != iterator; ++iterator )
{
value << iterator->c_str() << endl;
}
return value.str();
}
private:
Pizza( const Pizza& ); // Disable copy constructor
void operator=( const Pizza& ); // Disable assignment operator
protected:
string _name;
string _dough;
string _sauce;
mutable list<string> _toppings;
};
Pizza::~Pizza() {}
/************************产品类******************************/
class VeggiePizza : public Pizza
{
public:
VeggiePizza()
{
_name = "Veggie Pizza";
_dough = "Crust";
_sauce = "Marinara Sauce";
_toppings.push_back( "Fresh Mozzarella" );
_toppings.push_back( "Grated Parmesan" );
_toppings.push_back( "Diced onion" );
_toppings.push_back( "Sliced mushrooms" );
_toppings.push_back( "Sliced red pepper" );
_toppings.push_back( "Sliced black olives" );
}
};
class CheesePizza : public Pizza
{
public:
CheesePizza()
{
_name = "Cheese Pizza";
_dough = "Regular Crust";
_sauce = "Marinara Pizza Sauce";
_toppings.push_back( "Shredded Mozzarella" );
_toppings.push_back( "Parmesan" );
}
};
class ClamPizza : public Pizza
{
public:
ClamPizza()
{
_name = "Clam Pizza";
_dough = "Thin Crust";
_sauce = "White garlic Sauce";
_toppings.push_back( "Grated parmesan cheese" );
_toppings.push_back( "Clams" );
}
};
class PepperoniPizza : public Pizza
{
public:
PepperoniPizza()
{
_name = "Pepperoni Pizza";
_dough = "Crust";
_sauce = "Marinara sauce";
_toppings.push_back( "Sliced Pepperoni" );
_toppings.push_back( "Sliced Onion" );
_toppings.push_back( "Grated parmesan cheese" );
}
};
/************************工厂类******************************/
class SimplePizzaFactory
{
public:
Pizza* createPizza( std::string type ) const
{
Pizza* pizza = 0;
if( type.compare( "cheese" ) == 0 )
{
pizza = new CheesePizza();
}
else if( type.compare( "pepperoni" ) == 0 )
{
pizza = new PepperoniPizza();
}
else if( type.compare( "clam" ) == 0 )
{
pizza = new ClamPizza();
}
else if( type.compare( "veggie" ) == 0 )
{
pizza = new VeggiePizza();
}
return pizza;
}
};
/***********************管理类**********************************/
class PizzaStore
{
private:
SimplePizzaFactory* _factory;
public:
explicit PizzaStore( SimplePizzaFactory* factory ) :
_factory( factory )
{
assert( factory );
}
public: Pizza* orderPizza( string type )
{
Pizza* pizza;
pizza = _factory->createPizza( type );
pizza->prepare();
pizza->bake();
pizza->cut();
pizza->box();
return pizza;
}
};
int main()
{
SimplePizzaFactory factory;
PizzaStore store( &factory );
auto_ptr< Pizza> pizza( store.orderPizza( "cheese" ) );
cout << "We ordered a " << pizza->getName() << std::endl;
pizza = auto_ptr< Pizza>(store.orderPizza( "veggie" ) );
cout << "We ordered a " << pizza->getName() << std::endl;
return 0;
}
分享到:
相关推荐
### 设计模式——Abstract Factory模式的认识 在软件工程领域,设计模式是一种被广泛接受的解决方案,用于解决在软件设计过程中常见的问题。其中,Abstract Factory模式是23种GoF(Gang of Four)设计模式之一,它...
在设计模式中,Abstract Factory模式是一种用来解决在不指定具体实现的情况下创建一系列相关或相互依赖对象的模式。在本文的上下文中,我们看到它被应用于一个奇幻RPG游戏的角色种族设计,每个种族(如人类、精灵)...
Factory模式,也称为工厂模式,是软件工程中常用的设计模式之一,主要用来解决对象创建时的灵活性和可扩展性问题。在C++中,工厂模式是实现抽象工厂接口的类,用于生成特定类型的对象,而不需要暴露创建逻辑,同时...
Simple Factory模式: 定义创建对象的接口,并封装对象的创建。 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来处理一些问题。抽象出一些类的公共接口作为抽象基类或者接口。这样的话,我们将会面临一个...
在C++中,Factory模式通常涉及到以下几个关键角色: 1. **Factory接口(Factory)**:这是抽象工厂类,定义了创建产品对象的公共接口。在`factory.cpp`和`factory.h`文件中,你会看到这个接口的定义和实现。 2. **...
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
总的来说,AbstractFactory模式在C++中的实现充分利用了面向对象的特性,如抽象类、继承和多态,使得系统具有更好的灵活性和扩展性。通过这种方式,我们可以轻松地替换或增加新的产品族,而不会对原有代码造成太大的...
Complex Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来处理一些问题。抽象出一些类的公共接口作为抽象基类或者...
这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...
Factory模式的核心思想是提供一个接口或者抽象类,用于创建某一类对象,但允许其子类决定实例化哪一个类。这种模式使得创建过程与使用过程解耦,提高了代码的灵活性和可扩展性。Factory模式通常分为简单工厂(Simple...
**工厂模式**是一种常见的设计模式,它在Java中被广泛应用于创建对象实例。工厂模式的主要目的是将对象的创建过程封装起来,使得代码更加灵活且易于维护。通过使用工厂模式,我们可以将实例化对象的责任从客户端代码...
设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...
【工厂模式】 工厂模式是一种常用的软件设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品时,它不会直接创建,而是调用工厂对象来生产。工厂模式的主要目的是将对象的创建过程...
**工厂模式**是软件设计模式中的经典创建型模式,它为创建对象提供了一种抽象接口,使得客户端代码在不关心具体实现的情况下,可以调用一个公共接口来获取所需的实例。这种模式的核心思想在于封装对象的创建过程,将...
本篇文章将深入探讨两种常用的设计模式:Model-View-Controller(MVC)和Factory模式。 **Model-View-Controller(MVC)模式** MVC是一种架构模式,广泛应用于Web应用和图形用户界面设计,旨在分离应用程序的数据...
简单工厂模式(Simple Factory Pattern)是一种设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在简单工厂模式中,当一个类不知道它所必须创建的对象的类的时候,它会将这个任务委托给一个工厂对象。在...
总的来说,Facade模式和Simple Factory模式是Java设计模式中的重要组成部分,它们分别解决了简化复杂系统接口和对象创建的问题。学习和运用这些模式,不仅可以提高代码质量,还能使软件更加灵活,适应未来可能的变化...
设计模式-Singleton与Factory
Factory 模式是一种创建型模式,用于提供一种创建对象的接口。Factory 模式的优点是可以提供一种统一的创建对象的接口,减少了代码的耦合度。Factory 模式的缺点是它可能会增加代码的复杂度。 4. Abstract Factory ...