大话设计模式-Study-Tips-第一章-简单工厂模式

来源:互联网 发布:网红张大奕的淘宝店 编辑:程序博客网 时间:2024/05/02 12:19

一、UML图

C#版


c++版本


二、包含的角色

简单工厂模式包含三个角色:

(1)工厂类Factory:工厂类是用来制造产品的。因此,在Factory中有一个用于制造产品的Create函数或者Generate函数之类的函数(这里的CreateProduct)。这个函数能够根据“标识符”(这里的ProductType)的不同生成不同的ConcreteProduct,当然这些ConcreteProduct都是继承自AbstractProduct的。

(2)抽象产品类AbstractProduct:抽象产品是从其他具体产品抽象出来的。抽象产品类只有一个。

(3)具体产品类ConcreteProduct:具体产品类继承自抽象产品类,可以有多个。当需要增加新的产品的时候就增加一个继承自抽象产品类的具体产品类即可。

三、优势:

实现了松耦合,当需要增加一种新Product,只需要做两点改动:

(1)增加一个继承AbstractProductConcreteProduct

(2)在Factory中,switch中,增加一种根据标识符产生新运算的case即可。

四、代码实现

这里主要实现CreateProduct的编码。
C#实现
public AbstractProduct CreateProduct(ProductType type){    AbstractProduct product = null;    switch (type)    {        case ProductType.A:            product = new ConcreteProductA();            break;        case ProductType.B:            product = new ConcreteProductB();            break;        case ProductType.C:            product = new ConcreteProductC();            break;        default:            break;    }    return product;}
static void Main(string[] args){    AbstractProduct product = null;    Factory factory = new Factory();    product = factory.CreateProduct(ProductType.A); //根据这里传入的Type来生成不同的Product    Console.WriteLine("Hello World!");}

C++实现
AbstractProduct* Factory::CreateProduct(ProductType type){AbstractProduct* product;switch (type){case A:product = new ConcreteProductA();break;case B:product = new ConcreteProductB();break;case C:product = new ConcreteProductC();break;default:break;}return product;}
int main(){    AbstractProduct* product=NULL;    Factory factory;    product = factory.CreateProduct(A);//根据这里传入的参数Type来生成不同的Product    if (product!= NULL)    {delete product;product = NULL;    }    return 0;}