zoukankan      html  css  js  c++  java
  • 友元接口限制你的友元类数量

    友元接口-限制你的友元类数量

    在写C++程序时,也许你遇到过这样的情况:
    在一个类有一组策略,而且这组策略的实现都需要访问A的一些成员,而且这些成员并不希望被其它类所访问。
    一般这些成员被期望设置为保护或者私有的,并且这组策略被当作这个类A的友元类。如:


    class Strategy1;
    class Strategy2;
    class Strategy3;

    class A
    {
    public:
             friend class Strategy1;
             friend class Strategy2;
             friend class Strategy3;
    private:
             
    void _foo();
             
    int _bar;
    };

    现在,假如你需要添加新的策略Strategy4为了维持这种微妙的关系,你需要把Strategy4添加为类A的新的友元类。
    随着策略的增加,这个过程不断扩展A的友元类,最终你恐怕不会喜欢你看到的代码。并且由于每次增加策略都需要使得依赖A的代码重新编译,这里一定有什么不妥之处。

    我想到一种解决方法,可以让你的代码看上去不算太混乱。
    首先,既然这组策略以相似的情况出现在A的周围,那么它们可能有相似之处。比如它们可能需要访问A的同一部分成员。
    那么假如通过一个代理类来访问这些成员,那么这组策略就不必都是A的友元,只要这个代理是A的友元即可。
    这个代理我称之为友元接口。

    Code

    如此一来,既完成了友元关系,又减少了依赖关系。
    缺点在于代码不具备防御性,非授权类可以轻易的获得访问A保护成员的能力。只需要从友元接口继承即可。
    这里再进一步可以看到,如果类A有多组不同方面的策略,这些策略需要访问A的成员的不同子集,那么它们可以独立的归到各自的友元接口上,互不相干。

    kaikai

    ps. 发现被转载了,没带上链接,而且还被分类到java版块。特此在内容中做一些改动:标明语言c++

  • 相关阅读:
    VS2008编写MFC程序--使用opencv2.4()
    November 02nd, 2017 Week 44th Thursday
    November 01st, 2017 Week 44th Wednesday
    October 31st, 2017 Week 44th Tuesday
    October 30th, 2017 Week 44th Monday
    October 29th, 2017 Week 44th Sunday
    October 28th, 2017 Week 43rd Saturday
    October 27th, 2017 Week 43rd Friday
    October 26th, 2017 Week 43rd Thursday
    October 25th, 2017 Week 43rd Wednesday
  • 原文地址:https://www.cnblogs.com/kaikai/p/1562463.html
Copyright © 2011-2022 走看看