PHP设计模式-对象行为型模式-VISITOR

没名行不

没名行不

2016-01-29 13:28

PHP设计模式-对象行为型模式-VISITOR,PHP设计模式-对象行为型模式-VISITOR

    个人认为在23个经典模式中VISITOR是比较难理解的一个,所以决定先讲讲自己对VISITOR的理解。因为马哲认为对事物的认识是从具体到抽象的一个过程,所以在谈理论之前先说一个例子是必要的。这个例子不是实际应用,但我想它还算生动,是个记忆VISITOR模式的好例子吧。

    英国、美国都有自己的核武机构,每个国家的核武机构,都使用不同的接口来进行通讯:
CODE:    class Country
    {
         // ...
    }
   
1,对于英国,核武密码被分成三个部分,需要用三个接口取得:
CODE:   interface I1{function get1();};
   interface I2{function get2();};
   interface I3{function get3();};
   class English extends Country implements I1,I2,I3
   {
               function get1(){return '123';}
               function get2(){return '456';}
               function get3(){return '789';}
   }
   
2,对于美国,保管核武密码的方式不一样,使用了5个接口来分别取得密码的部分:
CODE:   interface Ia{function getA();};
   interface Ib{function getB();};
   interface Ic{function getC();};
   interface Id{function getD();};
   interface Ie{function getE();};
   class America extends Country implements Ia,Ib,Ic,Id,Ie
   {
               function getA(){return 'a';}
               function getB(){return 'b';}
               function getC(){return 'c';}
               function getD(){return 'd';}
               function getE(){return 'e';}
   }
   
如果我们中国欲取得此二国的核武密码,则必须先熟知这二国的核武密码接口。实际行动(runtime)时,
用if..else来判断现在具体是哪个国家,然后调用该国相应的核武密码接口。
CODE:      class Client
      {
            private function getRealPwd(Country $country)
            {
                  if($country instanceof English)
                  {
                      return $country-get1() mod ( $country-get2() + $country-get3() );
                  }elseif($country instanceof American){
                        return $country-getA() . $country-getB() . $country-getC() . $country-getD() . $country-getE();
                  }elseif(...){
                        ...
                  }
            }
      }
   

展开更多 50%)
分享

猜你喜欢

PHP设计模式-对象行为型模式-VISITOR

PHP
PHP设计模式-对象行为型模式-VISITOR

PHP系列教程:设计模式介绍Ⅵ伪对象模式

PHP
PHP系列教程:设计模式介绍Ⅵ伪对象模式

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

PHP系列教程:设计模式介绍Ⅱ值对象模式

PHP
PHP系列教程:设计模式介绍Ⅱ值对象模式

Java模式设计之数据访问对象模式

编程语言 网络编程
Java模式设计之数据访问对象模式

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

PHP系列教程:设计模式介绍Ⅴ注册模式

PHP
PHP系列教程:设计模式介绍Ⅴ注册模式

PHP系列教程:设计模式介绍Ⅸ规范模式

PHP
PHP系列教程:设计模式介绍Ⅸ规范模式

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

ASP.Net实现将Word转换PDF格式

ASP.Net实现将Word转换PDF格式

《忍者龙剑传:西格玛加强版》奖杯

《忍者龙剑传:西格玛加强版》奖杯
下拉加载更多内容 ↓