界面 (interface) 可以是一種 "約束"、"契約" 的概念,
任何實做 (implements) 介面 (interface) 的類別 (class),
都必須實做 (implements) 介面 (interface) 所定義的 method
interface IXyz{
function m();
}
class Xyz1 implements IXyz{
function m(){trace("xxxxxx");}
}
class Xyz2 implements IXyz{
function m(){trace("yyyyyy");}
}
因為,interface 可以當作是一種契約,所以任何符合這種契約的類別,
我們都可以不用管他是如何去實做這個契約的,
只要知道他有提供契約中所規範的 method 就好了,
function doSomething(arg:IXyz){
arg.m();
}
doSomething(new Xyz1());
doSomething(new Xyz2());
當分工合作的時候,當解決方案有很多種,
或是在開放架構上,實做方法由每家公司自己提供,
這時候提出規範的人,就是要定義出這個介面
譬如,資料庫連線,每種資料庫 (MS SQL Server, MySQL, Oracle, DB2......) 都有提供各自的 Driver,
但是可能都是用 conn.open() 之類的語法,來開啟資料庫連線,
這是如何做到的,就是因為事前已經定義好共通的介面,每家公司只要實做即可,
interface IConnection{
function open();
}
class MySQLConnection implements IConnection{
function open(){......}
}
class OracleConnection implements IConnection{
function open(){......}
}
(以上範例是我亂寫的~)
當然,還有其他情況 或其他應用方式,來使用介面,
也有可能某個介面沒有規範任何 method 需要實做,
實做此介面的類別,只是一種被下了"標籤"的意味~