《面試準備》C++工廠模式

工廠模式

參考:https://www.cnblogs.com/huiz/p/8232783.html

1、簡單工廠模式

在工廠類做判斷,從而創建相應的產品,當增加產品時需要修改工廠類。

#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

//簡單工廠模式
//枚舉
enum cartype{benci,baoma};
//抽象類(多態:提高基類)
class car{
public:
    virtual void createcar(void)=0;
};
//具體類(產品1)
class bencicar:public car{
public:
    bencicar(){
        cout<<" begin create bencicar "<<endl;
    }
    void createcar(void){
        cout<<" creating bencicar "<<endl;
    }
    ~bencicar(){}
};
//具體類(產品2)
class baomacar:public car{
public:
    baomacar(){
        cout<<" begin create baomacar "<<endl;
    }
    void createcar(void){
        cout<<" creating baomacar "<<endl;
    }
    ~baomacar(){}
};
//工廠類
class carfactory{
public:
    car* createSpecificCar(cartype type){
        switch(type){
        case benci:
            return (new bencicar());
            break;
        case baoma:
            return (new baomacar());
            break;
         default:
            return NULL;
            break;
        }
    }
};

int main(){
    carfactory producecar;
    car *newcar1 = producecar.createSpecificCar(benci);
    car *newcar2 = producecar.createSpecificCar(baoma);
    newcar1->createcar();
    newcar2->createcar();
    return 0;
}

2、工廠方法模式

抽象工廠類,只提供一個接口,通過子類去擴展和實現

#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

//工廠方法模式

//抽象類(多態:提高基類)
class car{
public:
    virtual void createcar(void)=0;
};
//具體類(產品1)
class bencicar:public car{
public:
    bencicar(){
        cout<<" begin create bencicar "<<endl;
    }
    void createcar(void){
        cout<<" creating bencicar "<<endl;
    }
    ~bencicar(){}
};
//具體類(產品2)
class baomacar:public car{
public:
    baomacar(){
        cout<<" begin create baomacar "<<endl;
    }
    void createcar(void){
        cout<<" creating baomacar "<<endl;
    }
    ~baomacar(){}
};
//抽象工廠類,提供創建產品類的接口
class carfactory{
public:
    virtual car* createSpecificCar()=0;
};

//工廠類子類
class bencifactory:public carfactory{
    car* createSpecificCar(){
        return (new bencicar());
    }
};
//工廠類子類
class baomafactory:public carfactory{
    car* createSpecificCar(){
        return (new baomacar());
    }
};

int main(){
    carfactory *producecar1 = new bencifactory();
    car *newcar1 = producecar1->createSpecificCar();
    newcar1->createcar();
    carfactory *producecar2 = new baomafactory();
    car *newcar2 = producecar2->createSpecificCar();
    newcar2->createcar();
    return 0;
}

 3、抽象工廠模式

當存在多個產品系列,而客戶端只使用一個系列的產品時(選擇普通產品還是高配產品),可以考慮使用抽象工廠模式。

缺點:當增加一個新系列的產品時,不僅需要現實具體的產品類,還需要增加一個新的創建接口,擴展相對困難。

#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

//工廠方法模式

//抽象類(多態:提高基類)
class car{
public:
    virtual void createcar(void)=0;
};
class highcar{
public:
    virtual void createcar(void)=0;
};
//具體類(產品1)
class bencicar:public car{
public:
    bencicar(){
        cout<<" begin create bencicar "<<endl;
    }
    void createcar(void){
        cout<<" creating bencicar "<<endl;
    }
    ~bencicar(){}
};
//具體類(產品1,高性能)
class highbencicar:public highcar{
public:
    highbencicar(){
        cout<<" begin create highbencicar "<<endl;
    }
    void createcar(void){
        cout<<" creating highbencicar "<<endl;
    }
    ~highbencicar(){}
};
//具體類(產品2)
class baomacar:public car{
public:
    baomacar(){
        cout<<" begin create baomacar "<<endl;
    }
    void createcar(void){
        cout<<" creating baomacar "<<endl;
    }
    ~baomacar(){}
};
//具體類(產品2,高性能)
class highbaomacar:public highcar{
public:
    highbaomacar(){
        cout<<" begin create highbaomacar "<<endl;
    }
    void createcar(void){
        cout<<" creating highbaomacar "<<endl;
    }
    ~highbaomacar(){}
};
//抽象工廠類,提供創建產品類的接口
class carfactory{
public:
    virtual car* createSpecificCar()=0;
    virtual highcar* createSpecificHightCar()=0;
};

//工廠類子類
class bencifactory:public carfactory{
    car* createSpecificCar(){
        return (new bencicar());
    }
    highcar* createSpecificHightCar(){
        return (new highbencicar());
    }
};
//工廠類子類
class baomafactory:public carfactory{
    car* createSpecificCar(){
        return (new bencicar());
    }
    highcar* createSpecificHightCar(){
        return (new highbaomacar());
    }
};

int main(){
    carfactory *producecar1 = new bencifactory();
    car *newcar1 = producecar1->createSpecificCar();
    newcar1->createcar();
    carfactory *producecar2 = new baomafactory();
    highcar *newcar2 = producecar2->createSpecificHightCar();
    newcar2->createcar();
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章