C++ 12 外观模式

本文介绍了外观模式,一种用于简化系统对外接口的设计模式。通过案例展示了如何使用外观模式来隐藏复杂的库存管理逻辑,仅提供简单的购买和退货功能。在代码中,`CangKu`类作为库存管理的外观,而`XiaoChengXu`类则对外提供购鞋和退鞋的简单操作。这种模式常用于分层结构,确保系统对外只暴露必要的接口,降低了系统的使用难度。
  1. 说明

    • 外观模式

      • 简化操作对外。
      • 甚至可以理解为对外的傻瓜操作。比如游戏的上下左右。隐藏底层的逻辑。
    • 核心

      • 接口不变。
      • 接口实现变化。
      • 甚至可以理解为只有函数声明。
    • 使用场景

      • 分层结构。
      • 对外提供函数,系统对外仅仅提供几个系统调用。
  2. 案例

    • 书接上回

      • 鞋贩子开通了一个小程序,允许客户在线选购。
      • 就提供了选择和买卖的功能。
    • 代码

      #include<iostream>
      #include<string>
      #include<map>
      
      class CangKu {
      public:
       bool ChuHuo(std::string shangpin,int shuliang){
         auto iter = shangpin_shuliang_.find(shangpin);
         if(shangpin_shuliang_.end() != iter) {
           while(shuliang >= iter->second) {
             std::cout << "xian you " << iter->second << " xu yao:" << shuliang <<" jin huo ....." << std::endl;
             iter->second += 50;
           }
           iter->second -= shuliang;
         } else {
           int count = 0;
           while(shuliang >= count) {
             std::cout << "xian you " << count << " xu yao:" << shuliang <<" jin huo ....." << std::endl;
             count += 50;
           }
           shangpin_shuliang_[shangpin] = count - shuliang;
         }
         return true;
       }
       bool TuiHuo(std::string shangpin,int shuliang) {
         auto iter = shangpin_shuliang_.find(shangpin);
         if(shangpin_shuliang_.end() != iter) {
           iter->second += shuliang;
           return true;
         } else {
           std::cout << "mei mai guo" << std::endl;
           return false;
         }
       }
      private:
       std::map<std::string,int> shangpin_shuliang_;
      };
      
      
      class XiaoChengXu {
      public:
       bool MaiShangPin(std::string shangpin,int shu_liang){
         return cangku_.ChuHuo(shangpin,shu_liang);
       }
       bool TuiShangPin(std::string shangpin,int shu_liang){
         return cangku_.TuiHuo(shangpin,shu_liang);
       }
      private:
       CangKu cangku_;
      };
      
      int main() {
       XiaoChengXu chengxu;
       chengxu.MaiShangPin("tuoxie",3);
       chengxu.MaiShangPin("liangxie",3);
       chengxu.TuiShangPin("qiuxie",3);
      }
      
    • 说明

      • 卖不够就进货。
      • 买没有这个商品就告知无售卖记录。
  3. 总结

    • 对外就仅仅是提供一个函数。

    • 然后隐藏具体的实现细节。操作系统对外,C函数之类的一样。都是外观模式。strchr也没有提供细节,仅仅提供了一个外观。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值