工厂模式、回调、委托(学习笔记)

前言

感觉自己水平不足,腾出时间来学点东西。

工厂模式

假如说你写代码,每次需要某个对象你都要去把他new出来,你不想这样做,你就想能不能直接使用某个类帮我把对象构造好,然后我拿来用就成了。我们把这种帮你构造对象的类叫工厂,你只需要给工尝传参数,他就会把你想要的对象“生产”出来。
这样的模式有什么好处?

  • 分离了数据解析(data parsing)和对象功能,如果传入的对象出现问题那么一定是工厂的问题。
  • 提供了更好的对象维护结构。

示例代码

// 这样的写法也叫工厂方法模式 还有简单工厂和抽象工厂 优劣各有不同
typedef int Object_Type;
class ObjectAFactory;
class ObjectA : public Object
{
    
    
	friend class ObjectAFactory;
protected:
	ObjectA();  // 防止意料之外的构造,全部交给工厂
	~ObjectA();
};

class ObjectAFactory : public ObjectFactory
{
    
    
public:
	virtual ObjectA* Create();
	virtual void Destroy(ObjectA* obj);
	virtual Object_Type GetType();
};

// 用例
// ...

for(int i = 0; i < objectResNum; i++)
{
    
    
	objectResNum = objectResList[i];
	ObjectFactory* factory = ObjectFactoryManager::getObjectFactory(objectRes->getType());
	Object* object = factory->Create(objectRes);
	addObject(object)
}

// ...

回调

回调是一种架构,提示其它代码某个特定事件被触发了。为了实现这个功能,我们需要将一个函数指针/委托作为参数传到另一个函数,在另一个函数(也就是事件)中的某个地方去调用传入的函数(回调函数)。
这样说起来,回调其实特别简单,之所以今天才专门学一下可能是因为这个名字“回调”给人一种说不清楚的高级感,让人以为回调是个啥很复杂的东西。
既然讲了回调,就再讲讲委托

委托

你可以将一个或多个类对象和他的某个成员函数绑定一个委托,由这个委托来负责调用这些成员函数,来实现更灵活的代码。使用委托后,操作者不需要知道要进行操作的对象是谁,只要使用委托就能进行某些操作,这就是委托存在的意义。按照讲解者的比喻,这就好比你给餐厅(委托)打电话要求送餐(操作),你不需要自己找个送餐员(对象),餐厅(委托)会雇佣(绑定)送餐员(对象)。

关于委托,有一个小建议,如果可以的话,最好把调委托的函数和委托的运行函数在cpp文件里面挨着写,不然以后项目大了,委托代码会看得你头大。

事件

事件就是可绑定到多个函数并同时全部执行的委托(来自UE4文档)。事件相当的字面意思,事件广播就是发生了一个事件,执行的一系列函数就是事件本身。


猜你喜欢

转载自blog.csdn.net/qq_37856544/article/details/121902986