美文网首页
C++11 装饰器模式展示

C++11 装饰器模式展示

作者: FredricZhu | 来源:发表于2021-07-07 22:48 被阅读0次

题目,


image.png

这个题目开始想复杂了,折腾了两三个小时才折腾出来,不过这种设计本身也很蛋疼,
1、已经有red或者blue的,就不能再加
2、如果是第一次拼接,加上 that is xx。
3、如果是第二次拼接,加上 and xx。
直接字符串解析最简单。不用设置标志位,因为就算你设置标志位,你也不知道把标志位放在哪个地方好,如果是大家都能访问的标志位,最好放在Flower基类里面。然后其他人去更新这些标志位,如前面所述,至少需要两个标志位。
另外这里注意,需要装饰的对象是一个Flower类型的引用。每次传递都是传递的引用。
使用字符串实现其实没什么必要非要设置成引用。

如果是使用标志位实现,只能使用static标志位,即使使用引用也没有用,因为Rose, RedFlower, BlueFlower的父类会构造不同的标志位对象,不能保证访问同一个全局标志位。只能使用static解烦忧。

代码,

#include <string>
#include <sstream>
using namespace std;

struct Flower
{
  virtual string str() = 0;
};

struct Rose : Flower
{
  string str() override {
    ostringstream oss;
    oss << "A rose";
    return oss.str();
  }
};

struct RedFlower : Flower
{
    Flower& flower_;
    RedFlower(Flower& f): flower_{f} {
        
    }
    
    string str() override {
     
         ostringstream oss;
         oss << flower_.str();
         
         if(flower_.str().find("that is")!=string::npos) {
            if(flower_.str().find("red") == string::npos) {
                oss << " and red";
            }
         } else {
            oss << " that is red";
         }
         return oss.str();
     }
};

struct BlueFlower : Flower
{
    Flower& flower_;
    BlueFlower(Flower& f): flower_{f} {
        
    }
    
    string str() override {
     
         ostringstream oss;
         oss << flower_.str();
         
         if(flower_.str().find("that is")!=string::npos) {
            if(flower_.str().find("blue") == string::npos) {
                 oss << " and blue";
            }
           
         } else {
            oss << " that is blue";
         }
         return oss.str();
    }
};

相关文章

  • C++11 装饰器模式展示

    题目, 这个题目开始想复杂了,折腾了两三个小时才折腾出来,不过这种设计本身也很蛋疼,1、已经有red或者blue的...

  • C++11解释器模式展示

    题目, 本例实现一个简单的+,-法解释器,不考虑括号的情况,也就是不考虑优先级。需要支持嵌入变量的情况。如果变量是...

  • C++11迭代器模式展示

    题目, 这个代码跟迭代器没什么关系,就是先序遍历树,然后把遍历结果放到std::vector里面。不过有了这个st...

  • 装饰器模式

    一、装饰器模式介绍 二、装饰器模式代码实例

  • 9、结构型模式-装饰器设计模式

    1、如虎添翼的设计模式-装饰器设计模式 简介:讲解-装饰器设计模式介绍和应用场景 装饰器设计模式(Decorato...

  • 2021-07-26 装饰器模式与代理模式

    装饰器模式 定义 装饰器模式(Decorator Pattern)也叫包装模式(Wrapper Pattern),...

  • 1.装饰器模式

    装饰器模式 什么是装饰器模式? 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,...

  • thinking in Swift:重新审视装饰器模式

    thinking in Swift:重新审视装饰器模式 thinking in Swift:重新审视装饰器模式

  • 《设计模式》之装饰器模式

    装饰器模式 装饰器模式中主要有两个角色: 装饰器(夹克,帽子) 被装饰的对象(老王) 装饰器和被装饰的对象有两个特...

  • Decorator Pattern - 装饰器模式 - java

    装饰器模式注重扩展已有的功能。 对于 装饰器模式 的使用场景,以及优缺点等说明,请参考 菜鸟教程|装饰器模式 ,这...

网友评论

      本文标题:C++11 装饰器模式展示

      本文链接:https://www.haomeiwen.com/subject/nwnaultx.html