国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語言 > PHP > 正文

PHP面向接口編程,耦合設(shè)計(jì)模式

2024-09-04 11:43:43
字體:
供稿:網(wǎng)友

關(guān)于接口的理解,接口從更深層次的理解,應(yīng)是定義,規(guī)范,約束,與實(shí)現(xiàn),名實(shí)分離的原則,的分離,我們?cè)谝话銓?shí)現(xiàn)一個(gè)系統(tǒng)的時(shí)候,通常是將定義與實(shí)現(xiàn)合為一體,不加分離的,我認(rèn)為最為理解的系統(tǒng)設(shè)計(jì)規(guī)范應(yīng)是所有的定義與實(shí)現(xiàn)分離,盡管這可能對(duì)系統(tǒng)中的某些情況有點(diǎn)繁煩.

接口的本身反映了系統(tǒng)設(shè)計(jì)人員對(duì)系統(tǒng)的抽象理解,接口應(yīng)有兩類:第一類是對(duì)一個(gè)體的抽象,它可對(duì)應(yīng)為一個(gè)抽象體(abstract class);第二類是對(duì)一個(gè)體某一方面的抽象,即形成一個(gè)抽象面(interface);一個(gè)體有可能有多個(gè)抽象面,抽象體與抽象面是有區(qū)別的。

設(shè)計(jì)接口的另一個(gè)不可忽視的因素是接口所處的環(huán)境(context,environment),系統(tǒng)論的觀點(diǎn):環(huán)境是系統(tǒng)要素所處的空間與外部影響因素的總和。任何接口都是在一定的環(huán)境中產(chǎn)生的,因此環(huán)境的定義及環(huán)境的變化對(duì)接口的影響是不容忽視的,脫離原先的環(huán)境,所有的接口將失去原有的意義。   

按照組件的開發(fā)模型(3c),它們?nèi)呦噍o相成,各司一面,渾然一體,缺一不可,面向?qū)ο笫侵?我們考慮問題時(shí),以對(duì)象為單位,考慮它的屬性及方法,面向過程是指,我們考慮問題時(shí),以一個(gè)具體的流程(事務(wù)過程)為單位,考慮它的實(shí)現(xiàn),接口設(shè)計(jì)與非接口設(shè)計(jì)是針對(duì)復(fù)用技術(shù)而言的,與面向?qū)ο螅ㄟ^程)不是一個(gè)問題.

我希望的是盡量少的修改代碼,就能滿足他的需要,我可以抽象如下接口,以下為引用的內(nèi)容:

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

這個(gè)接口只定義兩個(gè)方法,沒有任何有實(shí)際意義的代碼,具體的代碼由實(shí)作這個(gè)接口的類來給出,比如mysql.java,以下為引用的內(nèi)容:

  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.     //連接數(shù)據(jù)庫(kù)教程的代碼 
  11.   } 
  12.  
  13.   public void close() 
  14.   { 
  15.     //關(guān)閉數(shù)據(jù)庫(kù) 
  16.   } 

下面看實(shí)例,代碼如下:

  1. <?php 
  2. interface js{ 
  3. function ys($a,$b); 
  4.  
  5. class af implements js{ 
  6.  
  7.   function ys($a,$b){ 
  8.      return "加法運(yùn)算......結(jié)果為:".($a+$b); 
  9.    } 
  10.  
  11. class jf implements js{ 
  12.  
  13.     function ys($a,$b){ 
  14.     return "減法運(yùn)算......結(jié)果為:".($a-$b); 
  15.     } 
  16. class aaf implements js{ 
  17.  
  18.     function ys($a,$b){ 
  19.     return "乘法運(yùn)算......結(jié)果為:".($a*$b); 
  20.     } 
  21. class jjf implements js{ 
  22.  
  23.     function ys($a,$b){ 
  24.     return "除法運(yùn)算......結(jié)果為:".($a/$b); 
  25.     } 
  26. class modf implements js{ 
  27.  
  28.     function ys($a,$b){ 
  29.     return "取模運(yùn)算......結(jié)果為:".($a % $b); 
  30.     } 
  31. class china implements js{ 
  32.      public $varl=null;//這里直接:public $varl = new nothingx(); 會(huì)出錯(cuò)。 
  33.      function __construct(){ 
  34.      $this->varl = new nothingx(); 
  35.   } 
  36.      function ys($a,$b){ 
  37.         return $this->varl->say(); 
  38.      } 
  39. /*也可以用繼承的方式實(shí)現(xiàn)喲: 
  40. class china extends nothingx implements js{ 
  41.      function ys($a,$b){ 
  42.      return parent::say(); 
  43.      } 
  44. } 
  45. */ 
  46. class nothingx{ 
  47.  function say(){ 
  48.     return "我什么運(yùn)算都不做...只是為了實(shí)現(xiàn)<font color=#990000><b>‘耦合設(shè)計(jì)模式’</b></font>...我是出來打醬油的......"
  49.  } 
  50.  
  51.  
  52. class test{ 
  53.    private $one
  54.    private $two
  55.    public function __construct($x,$y){ 
  56.       $this->one=$x
  57.       $this->two=$y
  58.    echo "<font size=20px><strong>面向?qū)ο蟪绦蛟O(shè)計(jì)——接口</font></strong><hr>class test初始化:<br>屬性$one=".$this->one."  屬性$two=".$this->two."<hr>"
  59.    }  
  60.    function display(js $a){ 
  61.       return "<font color=#990000><b>用php接口技術(shù)實(shí)現(xiàn)的運(yùn)算——開始運(yùn)算啦:</b></font><hr>".$a->ys($this->one,$this->two)."<hr>"
  62.    } 
  63. $t=new test(103,2); 
  64. $t1=new jf; 
  65. $t2=new china; 
  66. echo $t->display($t1); 
  67. echo $t->display($t2); 
  68. ?> 

好處:在小項(xiàng)目中,是體驗(yàn)不到的,使用接口編程,易于程序擴(kuò)展,降低程序耦合性.

舉個(gè)常用的例子說吧,你有個(gè)方法為:public viod doxx(arraylist arraylist),方法調(diào)用時(shí),參數(shù)必須為arraylist對(duì)象,某天,當(dāng)參數(shù)需要更換為其他集合類時(shí),必須更改代碼,此時(shí)如果用接口的話,就不須了,將方法更改為public viod doxx(list list),方法調(diào)用時(shí),參數(shù)就很靈活了,可以傳入arraylist、linkedlist等等,這樣從而降點(diǎn)耦合了.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 山丹县| 文昌市| 永清县| 门源| 根河市| 东乡| 阳谷县| 驻马店市| 石景山区| 井陉县| 都兰县| 北碚区| 太仓市| 崇信县| 湖州市| 斗六市| 武宁县| 闸北区| 佛山市| 乐清市| 平果县| 渝中区| 和平区| 江川县| 丘北县| 旬邑县| 招远市| 株洲县| 广东省| 泰宁县| 盖州市| 沙雅县| 开远市| 宁城县| 兰坪| 涟水县| 惠水县| 吴堡县| 紫阳县| 余庆县| 威远县|