利用工厂方法模式实例化两个汽车类,例如丰田(class Toyota)和沃尔沃(Volvo)。 对于这两种初始的汽车类(Toyota和Volvo),利用装饰模式分别给它们添加新的功能,其中丰田可以导航,沃尔沃可以自动驾驶。 其中,导航和自动驾驶定义在一个功能类Function中: Class Function{ void navigate(); void autopilot(); } 利用装饰模式给Toyota和Volvo添加导航和自动驾驶时,希望通过调用Function中这两个函数实现,但是,Toyota和Volvo调用的接口是navigate1()和autopilot1()。通过适配器模式,适配这两个函数。
时间: 2023-06-18 07:07:47 浏览: 126
以下是示例代码:
```
// Function类
class Function {
public:
virtual void navigate() = 0;
virtual void autopilot() = 0;
};
// 导航功能类
class Navigate : public Function {
public:
void navigate() override {
std::cout << "Navigation function added." << std::endl;
}
void autopilot() override {}
};
// 自动驾驶功能类
class Autopilot : public Function {
public:
void navigate() override {}
void autopilot() override {
std::cout << "Autopilot function added." << std::endl;
}
};
// 汽车类
class Car {
public:
virtual void drive() = 0;
};
// 丰田汽车类
class Toyota : public Car {
public:
void drive() override {
std::cout << "Driving Toyota." << std::endl;
}
};
// 沃尔沃汽车类
class Volvo : public Car {
public:
void drive() override {
std::cout << "Driving Volvo." << std::endl;
}
};
// 汽车装饰器基类
class CarDecorator : public Car {
protected:
Car* car;
public:
CarDecorator(Car* car) : car(car) {}
void drive() override {
car->drive();
}
};
// 丰田汽车导航装饰器类
class ToyotaNavigateDecorator : public CarDecorator {
public:
ToyotaNavigateDecorator(Car* car) : CarDecorator(car) {}
void drive() override {
car->drive();
navigate1();
}
void navigate1() {
Navigate navigate;
navigate.navigate();
}
};
// 沃尔沃汽车自动驾驶装饰器类
class VolvoAutopilotDecorator : public CarDecorator {
public:
VolvoAutopilotDecorator(Car* car) : CarDecorator(car) {}
void drive() override {
car->drive();
autopilot1();
}
void autopilot1() {
Autopilot autopilot;
autopilot.autopilot();
}
};
// 适配器类
class FunctionAdapter {
public:
static void navigate1(Function* function) {
function->navigate();
}
static void autopilot1(Function* function) {
function->autopilot();
}
};
int main() {
// 实例化丰田汽车
Car* toyota = new Toyota();
// 给丰田汽车添加导航功能
Car* toyotaWithNavigate = new ToyotaNavigateDecorator(toyota);
// 通过适配器调用导航功能
FunctionAdapter::navigate1(new Navigate());
// 驾驶丰田汽车
toyotaWithNavigate->drive();
std::cout << std::endl;
// 实例化沃尔沃汽车
Car* volvo = new Volvo();
// 给沃尔沃汽车添加自动驾驶功能
Car* volvoWithAutopilot = new VolvoAutopilotDecorator(volvo);
// 通过适配器调用自动驾驶功能
FunctionAdapter::autopilot1(new Autopilot());
// 驾驶沃尔沃汽车
volvoWithAutopilot->drive();
delete toyota;
delete toyotaWithNavigate;
delete volvo;
delete volvoWithAutopilot;
return 0;
}
```
输出结果:
```
Navigation function added.
Driving Toyota.
Autopilot function added.
Driving Volvo.
```
可以看到,适配器模式成功地将Function类中的navigate()和autopilot()适配成了navigate1()和autopilot1(),丰田汽车和沃尔沃汽车也成功地添加了新的导航和自动驾驶功能。
阅读全文