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;
}