• 使用静态函数impl模式做接口


    使用静态函数impl模式做接口#

    impl即桥接模式,主要是为了隐藏数据和减少不必要的编译。
    普通的impl模式做接口一般是:

    A类是接口,B类继承A类,是A类的实现,C类,包含A类和B类的头文件,把B类对象指针,转做为基类指针,给使用者。代码示意如下:

    // a.h
    class A{ // 接口类 纯虚函数
    	virtual  void add();
    };
    ///////////////////////////////////////////
    // b.h
    #include "a.h"
    class B:public A{ // 接口实现类
    	void add();
    }
    /////////////////////////////////////////
    //
    #include "a.h"
    #include "b.h"
    class C{ // 给使用者的类
    	A* GetA(){
    	    return new B();
    	};
    }
    /////////////////////////////////////////
    // c.cpp
    #include "b.h"
    #include "c.h"
     // 类c的实现
    	A* C::GetA(){
    	    return new B();
    	};
    }
    

    但是这样,用了三个类(也有是把第三个类用全局函数或全局对象代替),给使用者至少暴露两个类的头文件A和C;

    最近有在看webrtc的音频模块时,看到使用静态函数的方法获取实现类对象,感觉很是精巧,对实现的隐藏性更好,也达到了减少文件暴露,使用者只要包含接口文件即可。

    // a.h
    class A{ // 接口类 
        static A* GetA(); // 静态函数,在实现类B的cpp文件实现
    	virtual  void add();
    };
    ///////////////////////////////////////////
    // b.h
    #include "a.h"
    class B:public A{ // 接口实现类
    	void add();
    }
    ///////////////////////////////////////////
    // b.cpp
    A* A::GetA(){
        return new B();
    }
    

    调用静态函数getA()就可以获取实现类B的对象,对于使用者,只需要给接口类A的头文件,甚至使用者根本不知道实现类B的存在。

  • 相关阅读:
    SQL Server XML数据解析
    c# XML和实体类之间相互转换(序列化和反序列化)
    C#解析XML详解(XPath以及带命名空间NameSpace)
    Jquery实现按钮点击遮罩加载,处理完后恢复
    jquery控制div随滚动条滚动效果
    asp.net中利用Jquery+Ajax+Json实现无刷新分页(二)
    easyUI tree点击文字展开节点
    201805牛客模拟考
    策略模式
    非线程安全演变成线程安全---原子性与加锁机制
  • 原文地址:https://www.cnblogs.com/weiweisuhe/p/6012079.html
Copyright © 2020-2023  润新知