auto bike = std::make_unique<Bike>(); Context context(std::move(bike)); context.toAirport();
auto cab = std::make_unique<Cab>(); context.setStrategy(std::move(cab)); context.toAirport();
return0; }
/* Biking to the airport costs $0 Cab to the airport costs $3 */
由于这是开篇的第一个设计模式的讲解,需要特别说明几点:
如果你的系统没有任何可变,那你不需要设计模式,因为设计模式是应对变,即后来的扩展而发展出来的。那么在 C++ 中能有变化的就是抽象基类,所以在后续学习设计模式,只要搞清楚这个设计模式去应对哪个地方的变化,然后联想到抽象基类就会很容易写出代码了。就拿此处的策略模式举例,对于去机场有三种策略,这里需要变化的就是各种不同的策略,意味着要有一个抽象基类,这里面提高一个去机场的接口,然后各种策略继承这个接口并实现即可。