Пояснение к заводскому методу - PullRequest
1 голос
/ 01 мая 2020

Я изучаю фабричный метод, когда и зачем его использовать, но одна вещь, которая была немного двусмысленной, это то, почему мы используем ключевое слово stati c для фабричного метода, может кто-нибудь уточнить. как показано в приведенном ниже коде:

enum VehicleType { 
    VT_TwoWheeler,    VT_ThreeWheeler,    VT_FourWheeler 
}; 

// Library classes 
class Vehicle { 
public: 
    virtual void printVehicle() = 0; 
    static Vehicle* Create(VehicleType type); 
}; 
class TwoWheeler : public Vehicle { 
public: 
    void printVehicle() { 
        cout << "I am two wheeler" << endl; 
    } 
}; 
class ThreeWheeler : public Vehicle { 
public: 
    void printVehicle() { 
        cout << "I am three wheeler" << endl; 
    } 
}; 
class FourWheeler : public Vehicle { 
    public: 
    void printVehicle() { 
        cout << "I am four wheeler" << endl; 
    } 
}; 

// Factory method to create objects of different types. 
// Change is required only in this function to create a new object type 
Vehicle* Vehicle::Create(VehicleType type) { 
    if (type == VT_TwoWheeler) 
        return new TwoWheeler(); 
    else if (type == VT_ThreeWheeler) 
        return new ThreeWheeler(); 
    else if (type == VT_FourWheeler) 
        return new FourWheeler(); 
    else return NULL; 
} 

PS: этот код можно найти на GeeksForGeeks.

1 Ответ

0 голосов
/ 01 мая 2020

Stati c метод - это один метод для типа класса. Это означает, что вам не нужна переменная для класса Vehicle, если вы вызываете метод Create. Вы вызываете этот метод так: Vehicle::Create(YOU_TYPE), а не как «обычный» метод с переменной класса. Кроме того, Vehicle имеет чисто виртуальный метод, поэтому у вас не может быть переменной этого класса, поэтому метод stati c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...