C++设计模式:对象创建模式——工厂方法

对象创建

通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。

工厂机制:通过虚函数创建一个多态的new。
设计原则:避免抽象类依赖具体类。

class SplitterFactory {
public:
	ISplitter* CreateSplitter() {
		return new BinarySplitter;
	}
};
class ISplitter {
public:
	virtual void split() = 0;
	virtual ~ISplitter(){}
};
class BinarySplitter :public ISplitter {
public:
	virtual void split() {
	}
};
class TxtSplitter :public ISplitter {
public:
	virtual void split() {
	}
};

class MainForm{
public:
 SplitterFactory factory;
 Isplitter* splitter=factory.CreateSplitter();

}

在上述代码的MainForm函数中,在对splitter实例化的过程中,在SpliiterFactory,return new BinarySplitter仍然 依赖了BinarySplitter这个具体的类。
因此可以考虑使用虚函数作为创建对象的工具:

class SplitterFactory {
public:
	virtual ISplitter* CreateSplitter() = 0;
	virtual ~SplitterFactory(){}
};
class ISplitter {
public:
	virtual void split() = 0;
	virtual ~ISplitter(){}
};
//具体类
class BinarySplitter :public ISplitter {
public:
	virtual void split() {
	}
};
class TxtSplitter :public ISplitter {
public:
	virtual void split() {

	}
};
//创建具体工厂
class BinarySplitterFactory :public SplitterFactory {
public:
	virtual ISplitter* CreateSplitter() {
		return new BinarySplitter;
	}
};

class MainForm {
	SplitterFactory* factory;
public:
	MainForm(SplitterFactory* factory)
	{
		this->factory = factory;
	}
	void Button1_Click() {
		ISplitter* splitter = factory->CreateSplitter();
		splitter->split();
	}
};

在这里,我们将CreateSplitter定义为纯虚函数,具体依赖与子类的重写。接着创建具体工厂,具体工厂继承自基类工厂,然后具体工厂中,定义了返回一个什么样类型的ISplitter。

模式定义:
定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使得一个类的实例化延迟到子类。
目的:解耦
手段:虚函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值