1.简单工厂模式(Simple Factory Pattern)
一个工厂生产所有的产品,根据输入参数决定产品的种类。
#include "Factory.h" #include "ProductA.h" #include "ProductB.h" Product* Factory::createProduct(string proname) { if ("A" == proname) { return new ProductA(); } else if ("B" == proname) { return new ProductB(); } return NULL; }
2.工厂方法模式
一个具体的工厂对应着一个具体的产品。
具体的工厂类继承自工厂基类:
/////////////////////////////////////////////////////////// // ConcreteFactory.cpp // Implementation of the Class ConcreteFactory /////////////////////////////////////////////////////////// #include "ConcreteFactory.h" #include "ConcreteProduct.h" Product* ConcreteFactory::factoryMethod(){ return new ConcreteProduct(); }
主程序中只需要创造工厂,而不需要知道工厂具体的产品。
#include "Factory.h" #include "ConcreteFactory.h" #include "Product.h" #include <iostream> using namespace std; int main(int argc, char *argv[]) { Factory * fc = new ConcreteFactory(); Product * prod = fc->factoryMethod(); prod->use(); delete fc; delete prod; return 0; }
3.抽象工厂
当系统所提供的工厂所需要的生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品需要使用抽象工厂模式。
#include <iostream> #include "AbstractFactory.h" #include "AbstractProductA.h" #include "AbstractProductB.h" #include "ConcreteFactory1.h" #include "ConcreteFactory2.h" using namespace std; int main(int argc, char *argv[]) { AbstractFactory * fc = new ConcreteFactory1(); AbstractProductA * pa = fc->createProductA(); AbstractProductB * pb = fc->createProductB(); pa->use(); pb->eat(); AbstractFactory * fc2 = new ConcreteFactory2(); AbstractProductA * pa2 = fc2->createProductA(); AbstractProductB * pb2 = fc2->createProductB(); pa2->use(); pb2->eat(); }
/////////////////////////////////////////////////////////// // ConcreteFactory1.cpp // Implementation of the Class ConcreteFactory1 // Created on: 02-十月-2014 15:04:11 // Original author: colin /////////////////////////////////////////////////////////// #include "ConcreteFactory1.h" #include "ProductA1.h" #include "ProductB1.h" AbstractProductA * ConcreteFactory1::createProductA(){ return new ProductA1(); } AbstractProductB * ConcreteFactory1::createProductB(){ return new ProductB1(); }
/////////////////////////////////////////////////////////// // ProductA1.cpp // Implementation of the Class ProductA1 // Created on: 02-十月-2014 15:04:17 // Original author: colin /////////////////////////////////////////////////////////// #include "ProductA1.h" #include <iostream> using namespace std; void ProductA1::use(){ cout << "use Product A1" << endl; }
4.建造者模式(Builder)
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
#include <iostream> #include "ConcreteBuilder.h" #include "Director.h" #include "Builder.h" #include "Product.h" using namespace std; int main(int argc, char *argv[]) { ConcreteBuilder * builder = new ConcreteBuilder(); Director director; director.setBuilder(builder); Product * pd = director.constuct(); pd->show(); delete builder; delete pd; return 0; }
/////////////////////////////////////////////////////////// // ConcreteBuilder.cpp // Implementation of the Class ConcreteBuilder // Created on: 02-十月-2014 15:57:03 // Original author: colin /////////////////////////////////////////////////////////// #include "ConcreteBuilder.h" ConcreteBuilder::ConcreteBuilder(){ } ConcreteBuilder::~ConcreteBuilder(){ } void ConcreteBuilder::buildPartA(){ m_prod->setA("A Style "); //不同的建造者,可以实现不同产品的建造 } void ConcreteBuilder::buildPartB(){ m_prod->setB("B Style "); } void ConcreteBuilder::buildPartC(){ m_prod->setC("C style "); }
/////////////////////////////////////////////////////////// // Director.cpp // Implementation of the Class Director // Created on: 02-十月-2014 15:57:01 // Original author: colin /////////////////////////////////////////////////////////// #include "Director.h" Director::Director(){ } Director::~Director(){ } Product* Director::constuct(){ m_pbuilder->buildPartA(); m_pbuilder->buildPartB(); m_pbuilder->buildPartC(); return m_pbuilder->getResult(); } void Director::setBuilder(Builder* buider){ m_pbuilder = buider; }
5.原型模式(Prototype)
6.单例模式(Singleton)
系统中期望这个对象只有一个。
#include <iostream> #include "Singleton.h" using namespace std; int main(int argc, char *argv[]) { Singleton * sg = Singleton::getInstance(); sg->singletonOperation(); return 0; }
/////////////////////////////////////////////////////////// // Singleton.cpp // Implementation of the Class Singleton // Created on: 02-十月-2014 17:24:46 // Original author: colin /////////////////////////////////////////////////////////// #include "Singleton.h" #include <iostream> using namespace std; Singleton * Singleton::instance = NULL; Singleton::Singleton(){ } Singleton::~Singleton(){ delete instance; } Singleton* Singleton::getInstance(){ if (instance == NULL) { instance = new Singleton(); } return instance; } void Singleton::singletonOperation(){ cout << "singletonOperation" << endl; }
原文:https://www.cnblogs.com/stonemjl/p/12582285.html