關于接口的理解,接口從更深層次的理解,應是定義,規范,約束,與實現,名實分離的原則,的分離,我們在一般實現一個系統的時候,通常是將定義與實現合為一體,不加分離的,我認為最為理解的系統設計規范應是所有的定義與實現分離,盡管這可能對系統中的某些情況有點繁煩.
接口的本身反映了系統設計人員對系統的抽象理解,接口應有兩類:第一類是對一個體的抽象,它可對應為一個抽象體(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等等,這樣從而降點耦合了.
新聞熱點
疑難解答