不老呢看病的秘密--适配器模式,结构型模式之二

来源:互联网 发布:热恋软件 编辑:程序博客网 时间:2024/05/16 04:02

原创,转载请注明!  

      不老呢看过很多病,有不少看好了。有人就奇怪了,为何大医院要花费几百快的病,一个小小村民也能看好,这是为什么呢?以后还要不要去医院了?为了解开村民的疑惑,我们就来解开其中的奥秘,奥秘就在于。。。

      草药是不老呢自己做的。所有草药的原料、加工流程他门儿清。我们用一个类的实现来表示:

class 草药 {

   private:

   原材料一;

   原材料二;

   原材料三;

   加工方法(){}

   virtual 煎熬(){}

}

class 烫伤膏: public 草药{

......

}

class 痢疾药: public 草药{

......

}

        问题是,来找不老呢看病的不光是烫伤病人和痢疾病人,还有得了肝炎的,摔了腰扭了腿的,甚至还有得了癌症的。不老呢也不是神,他不可能看的了这么多种类的病,怎么办呢?进货,从县里的药房买进一些药,放到自己的药架子上,组成一个较齐全的常见病药架。

class 常见药 : 草药{

   private:

        Lists 西药; //黄氏响声丸, 抗生素, 泰诺,  ......;

   public: 

   常见药(药名){ 西药.pushback(药名);}

   virtual 煎熬(){

       西药[药名].服用方法();

   }    

}

      这天,来了一位小学老师,上课时把嗓子喊坏了,出不了声音。不老呢问明情况,找来一张报纸,给她包了一包草药,药里面埋了三颗黄氏响声丸,支炉子煎熬成糊糊,交给她带走并嘱咐开水冲服。

main(){

      //老师比划着:嗓子坏了,抓些草药吃。不老呢于是用黄氏响声丸加些无关痛痒的辅料做了一包”草药“,并开始支炉子煎熬:

     草药 interface = new 常见药(new 黄氏响声丸());

     interface.煎熬();

}

       这就是适配器模式,《设计模式》对她的定义:将一个类的接口转换成客户希望的另一接口,使原本由于接口不兼容不能一起工作的类可以一起工作。

       也就是说,当人们通过指定接口来使用两种事物,而这两种事物有不同的接口(比如草药是煎熬,西药是冲服),而你无法改动他俩的接口、或不想改动。这时就可以使用适配器模式,用继承加组合的方式来组成一个混合体,这个混合体有客户需要的接口,她满足人们调用指定接口的要求。

       其实,就是挂羊头,卖狗肉。

       适配器模式主要用于希望服用一些现存的类,但是,接口又不一致的情况。她分为类适配器和对象适配器。

类适配器使用多重继承来使一个接口匹配另一个接口:


       对象适配器就是就是用组合+继承的方式达到一个接口匹配另一个接口:


参考:《设计模式》

原创粉丝点击