通用插件框架体系-媒介系统

1.建立媒介系统的目的
      在实际的项目中,很多场景需要我们在不知道对象具体类型的情况下构建拷贝对象、复制数据、归档数据等。如在一个基础类库中管理了诸多的派生类,这些类是以基类类型指针或无类型指针管理的。另一种典型的场景是基础类库中要跨线程复制和拷贝数据时。这些场景有一个典型的特点是基础类库不知道派生对象的具体类型。媒介系统就是要建立一套机制,在这种场景下构建对象和归档对象。这一种需求类似于c++的运行时类型鉴定(RTTI),但又超越了运行时类型鉴定提供的能力。

2.构建媒介系统的思路    
    要构建对象,离不开类厂。构建媒介系统基础想法就是使用抽象类厂的机制构建。  使用一个全局单实例对象管理扩展对象的类厂,使用类型名称字符串的hash码关联类型和类厂,以此为基础提供扩展对象的拷贝、复制和归档能力。
    
3.代码解析
     3.1. 定义一个媒介基类,此基类提供抽象类厂基类的能力。
    class CMediaType
    {
    public:
        virtual void* create() = 0;
        virtual void* create(const void* other) = 0;
        virtual CArcher& save(CArcher& ar,const void *p) = 0;
        virtual CUnArcher& load(CUnArcher& ar,void * p) = 0;
    };
    
    3.2. 定义一个单实例对象,关联类厂
    class UTIL_PORT CMediaTypeManager
    {
    protected

你可能感兴趣的:(软件开发,c++,软件工程)