前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >接口思考小笔记

接口思考小笔记

作者头像
Qt君
发布2019-08-19 23:09:26
3060
发布2019-08-19 23:09:26
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

学习上的笔记。

Qt君推荐你一边听歌一边看~

具体性接口

  • 从代码上看问题不大,接口也够直观。
  • 缺点是,如果需要添加多个服务接口需要额外增加相应的接口。
代码语言:javascript
复制
class Media {
public:
     bool audioService();
     void setAudioService(bool enable);

     bool videoService();
     void setVideoService(bool enable);

     bool tvService();
     void setTvSerrvice(bool enable);

     bool broadcastService();
     void setBroadcastService(bool enable);

     ...
};

统一性接口

  • 这里有一个好处就是避免了上一个接口操作所带来的多接口的问题。
  • 相同服务类型的可以使用一个枚举来包含,如果不同的服务类型使用这个方法就会觉得很怪(意义上的不明确)。
代码语言:javascript
复制
enum MediaServices {
    Audio,
    Video,
    TV,
    Broadcast
};

bool services(MediaServices service);
void setServices(MediaServices service, bool enable);

简洁的接口

  • 下面这个例子它不再需要维护一个枚举类型,接口更简洁。
  • 但付出的代价是,时刻需要避免字符串容易写错的问题。
代码语言:javascript
复制
/* like: Audio, Video, TV, Broadcast */
bool services(const char *service);
void setServices(const char *service, bool enable);

进一步的思考

  • 无论上面的哪一种方式,都需要保存对应的变量值。
  • 常规做法是分别用四个变量保存(AudioService,VideoService,TVService,BoardcastService)。
  • 同样地思考,如果存在多个变量则需要添加多个变量。 想了想这里我们可以这样做(通过操控整型异或来存储四个布尔变量):
代码语言:javascript
复制
class Media {
public:
    enum MediaServices {
        Audio     = 0x00000001,
        Video     = 0x00000002,
        TV        = 0x00000004,
        Broadcast = 0x00000008
    };

    bool services(MediaServices service)
    {
        return service & m_services;
    }

    void setServices(MediaServices service, bool enable)
    {
        if (enable)
            m_services |= service;
        else {
            m_services &= ~service; 
        }
    }

private:
    int m_services;
};

最后

  • 无论是哪一种方法都有优缺点,没有谁更好,只有更适合你。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 具体性接口
  • 统一性接口
  • 简洁的接口
  • 进一步的思考
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档