•   欢迎来到21NN网.
  •   请记住本站网址www.21nn.cn

C++设想形式浅识装潢形式【C#.Net教程】,C++,设计模式,装饰模式

摘要: 装潢形式:动态的给一个对象增添一些分外的职责,就增添功用来讲,装潢形式比生成子类越发天真。装潢形式的四个角色:组件类:Component详细组件类:ConereteCompon...
装潢形式:动态的给一个对象增添一些分外的职责,就增添功用来讲,装潢形式比生成子类越发天真。

装潢形式的四个角色:

组件类:Component

详细组件类:ConereteComponent

装潢类:Decorator(从外类来扩大Component类的功用,但关于Component来讲是无需晓得Decorator存在的。)

详细装潢类:ConcreteDecorator(起到给Component增添职责的功用)

在此,以人们穿衣润饰为例完成装潢形式。

测试用例:

[code]int main(){
    //初始化person(人)组件类Component,假如只要一个ConereteComponent类而不须要笼统的Component类,那末能够直接让Decorator继续详细的Component类。
    concretePerson *cp = new concretePerson("Jarrett");

    //初始化详细衣饰类(装潢类Decorate)
    concreteTshirts *Tshirts = new concreteTshirts;
    concreteTrouser *Trouser = new concreteTrouser;
    concreteShoes *Shoe = new concreteShoes;
    //concreteSuit *Suit = new concreteSuit;
    concreteHat *Hat = new concreteHat;

    //顺次举行装潢
    Tshirts->decorate(cp);
    Trouser->decorate(Tshirts);
    Shoe->decorate(Trouser);
    //Suit->decorate(Shoe);
    //显现结果
    Shoe->show();
    std::cout << std::endl;
    //再装潢一次检察结果
    Hat->decorate(Shoe);
    Hat->show();

    return 0;
}

装潢形式完成:

[code]//主类
class concretePerson{
private:
    std::string name;//人名
public:
    concretePerson(){}
    concretePerson(std::string n):name(n){} //组织体式格局
    virtual void show()const{
        std::cout << name << "'s dress: ";
    }
};

//衣饰类(装潢类主类)
class Finery: public concretePerson{
protected:
    concretePerson *cPerson;//重点是保护一个主体类对象
public:
    void decorate(concretePerson *cp){
        cPerson = cp;
    }
    void show()const{
        if(cPerson != NULL)
            cPerson->show();
    }
};

//详细衣饰类Tshirts
class concreteTshirts: public Finery{
public:
  void show()const{
      Finery::show(); //挪用基类要领
      std::cout << "Tshirts ";  //用此来润饰
  }
};

//详细衣饰类Tshirts
class concreteTrouser: public Finery{
public:
  void show()const{
      Finery::show(); //挪用基类要领
      std::cout << "Trouser ";  //用此来润饰
  }
};

//详细衣饰类Tshirts
class concreteShoes: public Finery{
public:
  void show()const{
      Finery::show(); //挪用基类要领
      std::cout << "Shoe ";  //用此来润饰
  }
};

//详细衣饰类Tshirts
class concreteSuit: public Finery{
public:
  void show()const{
      Finery::show(); //挪用基类要领
      std::cout << "Suit ";  //用此来润饰
  }
};

//详细衣饰类Tshirts
class concreteHat: public Finery{
public:
  void show()const{
      Finery::show(); //挪用基类要领
      std::cout << "Hat ";  //用此来润饰
  }
};


总结:

装潢形式是为已有功用动态地增添更多的功用的一种体式格局。

应该在什么时候运用呢?

假如在一个已有递次中增添的功用仅仅是为了满足只在某些特定情况下才会实行的特别行动的须要,若在主类中增添代码会增添主类复杂度。这时候就须要装潢形式把每一个要装潢的功用放在零丁的类中,并让这个类包装它所要装潢的对象。

由于,当须要实行特别行动时,客户代码就能够在运行时根据须要有挑选的按递次地运用装潢功用包装对象。

装潢形式的意义就是你本身的主体类和详细类该怎样写就怎样写,我想分外埠增添特别功用时,就运用分外的类来增添功用,如许做比生成子类越发天真,不须要修正原主体类和详细类的代码。

如许将类中的装潢功用从主类搬移去除,能够简化原有的类。有用的把类的中心职责和装潢功用辨别开来,而且能够去除相干类中反复的装潢逻辑。


以上就是C++设想形式浅识装潢形式的内容,更多相干内容请关注ki4网(www.ki4.cn)!

分享到:

发表评论

评论列表

还没有评论,快来说点什么吧~

公众号二维码

微信公众号