工厂模式(Factory)
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行.
优点
只要知道名称就可创建对象,可拓展性好.
缺点
在实现类并不复杂时,使用该模式会造成代码冗余.
抽象类图
理解
实例化这个操作,不应该公开的进行,用new直接创建的方式就是针对实现编程,违背了设计模式原则中的依赖倒转原则.并且很多时候,创建一个类所做的初始化工作不那么简单,构造函数内可能会是一长串代码,你的代码就会显得冗长.面向对象的封装和分派已经告诉了我们做法:将长的代码分割开来,每段再进行封装,从而分散(降低)风险.
实现
生产汽车的过程是稳定的,汽车的类型是变化的.
#include <iostream>
using namespace std;
class Factory {
public:
virtual Factory* newCar() = 0;
virtual void finish() = 0;
};
class Car101 : public Factory {
public:
Factory* newCar() { return new Car101; }
void finish(){ cout << "汽车101制造完成!" << endl; }
};
class Car250 : public Factory {
public:
Factory* newCar() { return new Car250; }
void finish() { cout << "汽车250制造完成!" << endl; }
};
class Car {
public:
Car(Factory* factory):m_factory(factory){}
void getCar() {
Factory* factory = m_factory->newCar();//多态new
factory->finish();
}
private:
Factory* m_factory;
};
int main(void) {
Car car(new Car250);
car.getCar();
system("pause");
return 0;
}
从工厂模式中,我们知道了在具体实现类中,不直接地在类内用new来创建对象,而是利用组合,从而使在编译时依赖具体类转为了运行时依赖具体类,在之后的几篇讲述创建型模式的文章中,我们将学到更多间接创建对象的方式.