工厂模式

原创 2017年10月06日 21:22:55

1.简单工厂模式:(简单工厂模式不属于23种设计模式)
结构图:
这里写图片描述
优点:统一接口
缺点:违背了“开闭原则”
代码实现:
生产类:

class Product{
public:
    virtual void getName() = 0;
};
class ProductA:public Product{
public:
    void getName(){
        cout << "A产品" << endl;
    }
};
class ProductB:public Product{
public:
    void getName(){
        cout << "B产品" << endl;
    }
};
class ProductC:public Product{
public:
    void getName(){
        cout << "C产品" << endl;
    }
};

工厂类:

class Factory{
public:
    Product* send(string str){
        if (str == "A"){
            return new ProductA;
        }
        else if (str == "B"){
            return new ProductB;
        }
        else if (str == "C"){
            return new ProductC;
        }
        else{
            return NULL;
        }
    }

};

测试代码:

int main(void){
    Factory *fas= new Factory();
    Product *pc = fas->send("A");
    pc->getName();
    delete fas, pc;
    system("pause");
    return 0;
}

调试结果:
这里写图片描述
简单工厂:
如果想在增加一种产品,那么就要更改工厂类中的代码。为了解决这个问题,将工厂类抽象,用那种产品就new那个工厂。
结构图:
这里写图片描述
代码实现:
生产类不变。
工厂类:

class Factory{
public:
    virtual Product* send() = 0;
};
class FactoryA :public Factory{
    Product* send(){
        return new ProductA();
    }
};
class FactoryB :public Factory{
    Product* send(){
        return new ProductB;
    }
};
class FactoryC :public Factory{
    Product* send(){
        return new ProductC();
    }
};

测试代码:

int main(void){
    Factory *fas= new FactoryB();
    Product *pb = fas->send();
    pb->productDo();
    delete fas, pb;
    system("pause");
    return 0;
}

调试结果:
这里写图片描述
缺点:
每个子工厂的功能过于单一。
抽象工厂模式:
工厂模式只能生产一个产品,抽象工厂可以生产一个产品族。
结构图:
这里写图片描述
水果类:

class Fruit{
public:
    virtual void getName()=0;
};
class SouthApple :public Fruit{
public:
    void getName(){
        cout << "SouthApple" << endl;
    }
};
class SouthPear :public Fruit{
public:
    void getName(){
        cout << "SouthPear" << endl;
    }
};
class NorthApple :public Fruit{
public:
    void getName(){
        cout << "NorthApple" << endl;
    }
};
class NorthPear :public Fruit{
public:
    void getName(){
        cout << "NorthPear"<<endl;
    }
};

工厂:

class Factory{
    virtual Fruit* CreatApple() = 0;
    virtual Fruit* CreatPear() = 0;
};
class FactoryNorth :public Factory{
public:
    Fruit* CreatApple(){
        return new NorthApple();
    }
    Fruit* CreatPear(){
        return new NorthPear();
    }
};
class FactorySouth :public Factory{
public:
    Fruit* CreatApple(){
        return new SouthApple();
    }
    Fruit* CreatPear(){
        return new SouthPear;
    }
};

测试代码:

int main(void){
    FactoryNorth *fac = new FactoryNorth();
    Fruit *apple = fac->CreatApple();
    apple->getName();
    Fruit *pear = fac->CreatPear();
    pear->getName();
    delete apple, pear,fac;
    system("pause");
    return 0;
}

调试结果:
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

使用cache研究工厂模式

  • 2017年11月30日 14:09
  • 8KB
  • 下载

工厂模式简介和实例代码

  • 2016年11月17日 17:58
  • 3.87MB
  • 下载

C#中的三层架构+工厂模式BLL、DAL、IDAL、MODEL、DBUtility、DALFactory层级

三层架构,我们一般说的三层架构通常指的是: 1、表现层(UI):就是展现给用户的界面,无论是网站前台还是应用程序界面; 2、业务逻辑层(BLL):针对具体问题的逻辑操作; 3、数据访问层(DAL...

简单工厂模式

  • 2017年08月16日 20:07
  • 60.84MB
  • 下载

Factory(工厂模式)

Factory(工厂模式)概述工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创...

工厂模式测试

  • 2017年02月21日 17:01
  • 12KB
  • 下载

抽象工厂模式

  • 2016年08月12日 06:56
  • 18KB
  • 下载

asp.net mvc中自行搭建实现工厂模式的spring.net+三层架构 (15-4-20)

在之前的文章中,我们已经搭好了三层框架,通过调用业务层的子接口得到实例化的业务子类,通过业务子类来调用数据访问层子接口,由子接口来实例化数据访问层子类。这里我们需要明确把框架搭这么复杂的原因是遵循了设...

工厂模式及其实现

  • 2016年06月17日 14:13
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)