好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP面向接口编程,耦合设计模式 - php面向对象

PHP面向接口编程,耦合设计模式

关于接口的理解,接口从更深层次的理解,应是定义,规范,约束,与实现,名实分离的原则,的分离,我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理解的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点繁烦.

接口的本身反映了系统设计人员对系统的抽象理解,接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);一个体有可能有多个抽象面,抽象体与抽象面是有区别的。

设计接口的另一个不可忽视的因素是接口所处的环境(context,environment),系统论的观点:环境是系统要素所处的空间与外部影响因素的总和。任何接口都是在一定的环境中产生的,因此环境的定义及环境的变化对接口的影响是不容忽视的,脱离原先的环境,所有的接口将失去原有的意义。   

按照组件的开发模型(3c),它们三者相辅相成,各司一面,浑然一体,缺一不可,面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法,面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现,接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题.

我希望的是尽量少的修改代码,就能满足他的需要,我可以抽象如下接口,以下为引用的内容:

package org.bromon.test;  public   interface  db  {    java.sql.connection opendb(string url,string user,string password);    void close();  } 

这个接口只定义两个方法,没有任何有实际意义的代码,具体的代码由实作这个接口的类来给出,比如mysql.java,以下为引用的内容:

package org.bromon.test;  import java.sql.*;  public   class  mysql  implements  db  {     private  string url=]jdbc:mysql:localhost:3306/test];     private  string user=]root];     private  string password=]];     private  connection conn;     public  connection opendb(url,user,password)    {       //连接数据库教程的代码     }       public  void close()    {       //关闭数据库     }  } 

下面看实例,代码如下:

<?php  interface  js{  function  ys( $a , $b );  }    class  af  implements  js{       function  ys( $a , $b ){        return   "加法运算......结果为:" .( $a + $b );     }  }    class  jf  implements  js{         function  ys( $a , $b ){       return   "减法运算......结果为:" .( $a - $b );      }  }  class  aaf  implements  js{         function  ys( $a , $b ){       return   "乘法运算......结果为:" .( $a * $b );      }  }  class  jjf  implements  js{         function  ys( $a , $b ){       return   "除法运算......结果为:" .( $a / $b );      }  }  class  modf  implements  js{         function  ys( $a , $b ){       return   "取模运算......结果为:" .( $a  %  $b );      }  }  class  china  implements  js{        public   $varl =null; //这里直接:public $varl = new nothingx(); 会出错。         function  __construct(){        $this ->varl =  new  nothingx();    }        function  ys( $a , $b ){           return   $this ->varl->say();       }  }  /*也可以用继承的方式实现哟:   class china extends nothingx implements js{        function ys($a,$b){        return parent::say();        }   }   */   class  nothingx{    function  say(){       return   "我什么运算都不做...只是为了实现<font color=#990000><b>‘耦合设计模式’</b></font>...我是出来打酱油的......" ;   }  }      class  test{      private   $one ;      private   $two ;      public   function  __construct( $x , $y ){         $this ->one= $x ;         $this ->two= $y ;      echo   "<font size=20px><strong>面向对象程序设计——接口</font></strong><hr>class test初始化:<br>属性$one=" . $this ->one. "  属性$two=" . $this ->two. "<hr>" ;     }       function  display(js  $a ){         return   "<font color=#990000><b>用php接口技术实现的运算——开始运算啦:</b></font><hr>" . $a ->ys( $this ->one, $this ->two). "<hr>" ;     }  }  $t = new  test(103,2);  $t1 = new  jf;  $t2 = new  china;  echo   $t ->display( $t1 );  echo   $t ->display( $t2 );  ?> 

好处 :在小项目中,是体验不到的,使用接口编程,易于程序扩展,降低程序耦合性.

举个常用的例子说吧,你有个方法为:public viod doxx(arraylist arraylist),方法调用时,参数必须为arraylist对象,某天,当参数需要更换为其他集合类时,必须更改代码,此时如果用接口的话,就不须了,将方法更改为public viod doxx(list list),方法调用时,参数就很灵活了,可以传入arraylist、linkedlist等等,这样从而降点耦合了.

查看更多关于PHP面向接口编程,耦合设计模式 - php面向对象的详细内容...

  阅读:43次