工厂模式

工厂模式(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来创建对象,而是利用组合,从而使在编译时依赖具体类转为了运行时依赖具体类,在之后的几篇讲述创建型模式的文章中,我们将学到更多间接创建对象的方式.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值