php专区

 首页 > php专区 > PHP高级 > 面向对象MVC > PHP面向接口编程,耦合设计模式 - php面向对象

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

分享到:
【字体:
导读:
          关于接口的理解,接口从更深层次的理解,应是定义,规范,约束,与实现,名实分离的原则,的分离,我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理解的...

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

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

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

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

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

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

  1. package org.bromon.test; 
  2. public interface db 
  3.   java.sql.connection opendb(string url,string user,string password); 
  4.   void close(); 

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

  1. package org.bromon.test; 
  2. import java.sql.*; 
  3. public class mysql implements db 
  4.   private string url=”jdbc:mysql:localhost:3306/test”; 
  5.   private string user=”root”; 
  6.   private string password=””; 
  7.   private connection conn; 
  8.   public connection opendb(url,user,password) 
  9.   { 
  10.     //连接数据库教程的代码 
  11.   } 
  12.  
  13.   public void close() 
  14.   { 
  15.     //关闭数据库 
  16.   } 

下面看实例,代码如下:

  1. interface js{ 
  2. function ys($a,$b); 
  3.  
  4. class af implements js{ 
  5.  
  6.   function ys($a,$b){ 
  7.      return "加法运算......结果为:".($a+$b); 
  8.    } 
  9.  
  10. class jf implements js{ 
  11.  
  12.     function ys($a,$b){ 
  13.     return "减法运算......结果为:".($a-$b); 
  14.     } 
  15. class aaf implements js{ 
  16.  
  17.     function ys($a,$b){ 
  18.     return "乘法运算......结果为:".($a*$b); 
  19.     } 
  20. class jjf implements js{ 
  21.  
  22.     function ys($a,$b){ 
  23.     return "除法运算......结果为:".($a/$b); 
  24.     } 
  25. class modf implements js{ 
  26.  
  27.     function ys($a,$b){ 
  28.     return "取模运算......结果为:".($a % $b); 
  29.     } 
  30. class china implements js{ 
  31.      public $varl=null;//这里直接:public $varl = new nothingx(); 会出错。 
  32.      function __construct(){ 
  33.      $this->varl = new nothingx(); 
  34.   } 
  35.      function ys($a,$b){ 
  36.         return $this->varl->say(); 
  37.      } 
  38. /*也可以用继承的方式实现哟: 
  39. class china extends nothingx implements js{ 
  40.      function ys($a,$b){ 
  41.      return parent::say(); 
  42.      } 
  43. } 
  44. */ 
  45. class nothingx{ 
  46.  function say(){ 
  47.     return "我什么运算都不做...只是为了实现‘耦合设计模式’...我是出来打酱油的......"
  48.  } 
  49.  
  50.  
  51. class test{ 
  52.    private $one
  53.    private $two
  54.    public function __construct($x,$y){ 
  55.       $this->one=$x
  56.       $this->two=$y
  57.    echo "面向对象程序设计——接口
    class test初始化:
    属性$one="
    .$this->one."  属性$two=".$this->two."
    "
  58.    }  
  59.    function display(js $a){ 
  60.       return "用php接口技术实现的运算——开始运算啦:
    "
    .$a->ys($this->one,$this->two)."
    "
  61.    } 
  62. $t=new test(103,2); 
  63. $t1=new jf; 
  64. $t2=new china; 
  65. echo $t->display($t1); 
  66. echo $t->display($t2); 
  67. ?> 

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

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

分享到:
php设计模式 建造者模式 与Adapter(适配...
php设计模式 建造者模式 与Adapter(适配器模式) 适配器模式:将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作. 建造者模式:将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示. /**   * 适配器模式 ...
php5 __autoload应用与include性能对比 -...
php5 __autoload应用与include性能对比 php5后,引入了__autoload这个拦截器方法,可以自动对class文件进行包含引用,通常我们会这么写,代码如下: function __autoload($classname) {   include_once $classname . '.class.php';   }  $user = new user();  ...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……