C/C++基础知识复习(50)

发布于:2025-03-09 ⋅ 阅读:(28) ⋅ 点赞:(0)

1. ​如何处理对象的状态变化?

状态模式是一种行为设计模式,允许对象在其内部状态改变时改变其行为。

通俗解释:

对象的状态就是它的“心情”或“模式”,比如灯的开关状态。

例子:

一个电灯有“开”和“关”两种状态,我们需要根据状态改变它的行为。

详细方法:

使用状态模式,将状态抽象成一个类。

代码示例:
class LightState {
public:
    virtual void handle() = 0;
};

class OnState : public LightState {
public:
    void handle() override { std::cout << "Light is ON\n"; }
};

class OffState : public LightState {
public:
    void handle() override { std::cout << "Light is OFF\n"; }
};

class Light {
private:
    LightState* state;
public:
    Light() : state(new OffState()) {}
    void setState(LightState* s) { state = s; }
    void pressSwitch() { state->handle(); }
};

int main() {
    Light light;
    light.pressSwitch(); // 灯关
    light.setState(new OnState());
    light.pressSwitch(); // 灯开
    return 0;
}

2. ​如何实现工厂模式?

工厂模式是一种创建型设计模式,定义一个用于创建对象的接口,但让子类决定实例化哪个类。

通俗解释:

工厂模式就是通过一个“工厂”来创建对象,就像你去工厂定制一辆车。

例子:

你需要创建不同类型的车(轿车、卡车),但不想直接调用构造函数。

详细方法:

定义一个工厂类,根据输入参数创建不同的对象。

代码示例:
class Car {
public:
    virtual void drive() = 0;
};

class Sedan : public Car {
public:
    void drive() override { std::cout << "Driving Sedan\n"; }
};

class Truck : public Car {
public:
    void drive() override { std::cout << "Driving Truck\n"; }
};

class CarFactory {
public:
    static Car* createCar(const std::string& type) {
        if (type == "Sedan") return new Sedan();
        if (type == "Truck") return new Truck();
        return nullptr;
    }
};

int main() {
    Car* car = CarFactory::createCar("Sedan");
    car->drive(); // 开轿车
    delete car;
    return 0;
}