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

2016-01-29 13:28 5 1 收藏

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

【 tulaoshi.com - PHP 】

    个人认为在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(...){
                        ...
                  }
            }
      }
   

来源:https://www.tulaoshi.com/n/20160129/1490269.html

延伸阅读
标签: PHP
上一节:《PHP设计模式介绍》第三章 工厂模式 《PHP设计模式介绍》第四章 单件模式 几乎所有面向对象的程序中,总有一两个资源被创建出来,在程序应用中持续被共享使用。例如,这样的一个资源,在一个电子商务程序的数据库连接中使用:这个连接在应用程序启动时初始化,程序于是可以有效的执行;当程序结束时,这个连接最终被断开并销毁...
标签: PHP
《PHP设计模式介绍》 导言 当你在不断的试图从你的应用程序中发现新的特征时,你是否发现你提出的解决方法和一些以前你已经实现的东西是如此的类似呢?如果你是一个程序员(即使你才开始很短的时间),你都可能回答是。这看起来就是你使用了一些以前的代码来解决软件开发过程中新发现的问题了。你可能已经认识到:你的解决方法是基本原理,...
标签: PHP
PHP 通常被安装在 Linux/Unix 操作系统上,并且搭配 Apache 服务器一起使用。在将 PHP 与 Apache 服务器一起安装的时候,你有三种不同的安装方式可以选择:静态模块,动态共享 对象 (Dynamic Shared Object, DSO)以及 CGI 程序执行文件。 在这里我建议大家使用动态共享对象的模式来安装 PHP,这是因为这种安装...
标签: Web开发
PHP 通常被安装在 Linux/Unix 操作系统上,并且搭配 Apache 服务器一起使用。在将 PHP 与 Apache 服务器一起安装的时候,你有三种不同的安装方式可以选择:静态模块,动态共享对象(Dynamic Shared Object, DSO)以及 CGI 程序执行文件。  在这里我建议大家使...
标签: PHP
  作者:Harry Fuecks 翻译:Easy Chen  MVC模式在网站架构中十分常见。它允许我们建立一个三层结构的应用程式,从代码中分离出有用的层,帮助设计师和开发者协同工作以及提高我们维护和扩展既有程式的能力。 视图(View) “视图”主要指我们送到Web浏览器的最终结果——比如我们的脚本生成的HTML。当说到视图时,很多人想到的是...

经验教程

653

收藏

42
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部