对已有类库扩展封装的代理(装饰)模式的实现

在项目开发中,经常会使用第三方库,包括外部封装或者是公司内部自己封装的类库。在使用这些类库的过程中,有时这些类库并不能全部满足我们的需求,需要我们在这些类库的基础之上进行扩展,以满足我们自己的需求,但是由于各种原因,这个类库的源码和维护人员已经不能找到了,需要自己在现有代码的基础之上进行开发,这就需要使用设计模式中的代理来实现新功能的扩展。

例如一个库中的新类,里面有创建各种设备的功能,但是现有的创建的设备没有满足我们需求的,于是我们自己创建了一个新的设备。继承自原来的设备类。

class DeviceEx :public Device{
   //扩展功能
}

原来的创建类:

class DeviceCreatorPrivate {
public:
	DeviceCreatorPrivate();
	~DeviceCreatorPrivate();

public:
	// 此方法创建的设备对象(new),需要外部进行释放
	static Device* create(DeviceType type);
	//其他代码
};

定义这个新的设备类型:

emnu DeviceType {
	//已有的设备类型
	...
	DeviceType_New,//新创建的设备类型
}

现在就要新的封装新的创建类代理:

class DeviceCreatorPrivateProxy {
public:
	DeviceCreatorPrivate();
	~DeviceCreatorPrivate();

public:
	// 此方法创建的设备对象(new),需要外部进行释放
	static Device* create(DeviceType type);
	//其他代码
};
Device* DeviceCreatorPrivateProxy::create(DeviceType type) {
	if (type == DeviceType_New) {//单独创建新设备
		return new DeviceEx ();
	}
	return DeviceCreatorPrivate::create(type);//其他设备的创建照旧
}

在实际应用中直接调用新类来创建设备就可以了,DeviceCreatorPrivateProxy::create

在原来的代码的基础上,不改变原来的代码就行再次封装实现新的功能,这就是代理的实现方式。

aaa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值