首頁  >  文章  >  後端開發  >  介面抽象類別 PHP中以介面、抽象類別、普通基底類別實作「面向介面程式設計」與「耦合方法」簡述

介面抽象類別 PHP中以介面、抽象類別、普通基底類別實作「面向介面程式設計」與「耦合方法」簡述

WBOY
WBOY原創
2016-07-29 08:44:381193瀏覽

複製程式碼 程式碼如下:


/*
邊學邊做的,為方便自己翻閱而發布,更為得到高人指點而發布,歡迎高手指點......
【提示】本例透過測試無誤
【情境設計】
模擬電腦主機板IDE接口,例如:主機板可以存取的儲存器常常有光碟機、硬碟、快閃記憶體等等,
為了方便,有必要對這些不同的儲存器設定相同的介面。
本例也假設一種前所未有的、訪問方式與眾不同的外星儲存器也要加到主機板上進行訪問,
於是需要採用耦合的設計模式。
【本例主要敘述】
1、透過介面、抽象類別、一般類別繼承三種方式達到所謂的「介面」模式,以此說明:
A、子類別物件可以當父類物件用,因為子類別是特殊的父類別!
B、請注意這三種實作方式中介面、抽象類別和一般類別繼承的基底類別寫法!
2、介面模式真的是一紙契約!
3、程式設計之"耦合設計模式"!
*/
//---------------------------------------- ------------------------------
/*【方式一】介面實作方式:*/
interface readandwrite {
function read();
function write();
}
class motherboard{
private $storage;
function __construct(readandwrite $obj){
$this ->storage=$obj;
}
function read(){
$this->storage->read();
}
function write(){
$this ->storage->write();
}
}
class flash implements readandwrite{
function __construct(){
echo "我是快閃記憶體:
";
}
function read(){
echo "開始讀取資料......
";
}
function write(){
echo "開始儲存資料. .....


";
}
}
class yingpan implements readandwrite{
function __construct(){
echo "我是硬碟:
";
}
function read(){
echo "開始讀取資料......
";
}
function write(){
echo "開始儲存數據....
";
}
}
class disco implements readandwrite{
function __construct(){
echo "我是光碟:
";
}
function read(){
echo "開始讀取資料......
";
}
function write(){
echo "開始儲存數據......
";
}
}
//------------------------- ---------------------------------------------
/* 【方式二】抽象類別實作方式:
abstract class readandwrite{
abstract function read();
abstract function write();
}
class motherboard{
private ;
$this->storage=$obj;
}
function read(){
$this->storage->read();
}
function write(){
$this->storage->write();
}
}
class flash extends readandwrite{
function __construct(){
echo "我是快閃記憶體:
";
}
function read(){
echo "開始讀取資料......
";
}
function write(){
echo "開始儲存資料......
";
}
}
class yingpan extends readandwrite{
function __construct() {
echo "我是硬碟:
";
}
function read(){
echo "開始讀取資料......
";
}
function write(){
echo "開始儲存資料......
";
}
}
class disco extends readandwrite{
function __construct( ){
echo "我是光碟:
";
}
function read(){
echo "開始讀取資料......
";
}
function write(){
echo "開始儲存資料......
";
}
}
*/
//--- -------------------------------------------------- -----------------
//【方式三】一般類別繼承實作方式:
/*
class readandwrite{
function read() {
echo "reading..............";
}
function write(){
echo "writing......... .....";
}
}
class motherboard{
private $storage;
function __construct(readandwrite $obj){
$this->storage=$obj ;
}
function read(){
$this->storage->read();
}
function write(){
$this->storage->write ();
}
}
class flash extends readandwrite{
function __construct(){
echo "我是快閃記憶體:
";
}
echo "我是快閃記憶體:
";
}
function read (){
echo "開始讀取資料......
";
}
function write(){
echo "開始儲存資料......";
}
}
class yingpan extends readandwrite{
function __construct(){
echo "我是硬碟:
";
}
echo "我是硬碟:
";
}
ftiontion read(){
echo "開始讀取資料......
";
}
function write(){
echo "開始儲存資料......
";
}
}
class disco extends readandwrite{
function __construct(){
echo "我是光碟:
";
}
echo "我是光碟:
";
}
function read(){
echo "開始讀取資料......
";
}
function write(){
echo "開始儲存資料..... .
";
}
}
*/
//-------------------------- --------------------------------------------
/* 【耦合模式】 耦合模式就是將不同標準的兩個類別(本例的介面、抽象類別、普通基底類別與外星儲存器有不同的存取方法), 透過中間轉換器,達到相同標準的目的,就像轉接線一樣-本例就是將unknow類別的Rdata、Wdata方法轉換成read、write方法,達到和本例的介面、抽象類別、普通基底類相同的存取方法, 本例的中間轉換器是Apdater類別。
由於php中只能繼承一個類別但可以繼承多個接口,所以產生了三種耦合方法:
方法一:中間轉換器Apdater類別繼承抽象類別或普通基類,但由於php中只能繼承一個類,所以在Apdater
類中定義一個外星存儲器類unknow的對象,並用重載繼承的抽象類或普通基類的訪問方法的方式來轉
換訪問方法,達到同一存取方法的目的。
方法二:中間轉換器Apdater類別繼承外星記憶體類別unknow、接口,此時可以直接用Apdater類別的存取方法
(parent::Rdata()與parent::Wdata()—— php中子類別呼叫父類別方法的方式),和實作介面規定方法,
來轉換存取方法,達到相同存取方法的目的。
方法三:與方法一雷同,只是改為繼承(實作)介面;
*/
//-------------------- --------------------------------------------------
/*
【方法一】
*/
/*
class unknow{
function __construct(){
echo "我是地球人未知的外星儲存器,我有不同於地球儲存器的存取方式:
";
}
function Rdata(){
echo "I'm reading now......
";
}
function Wdata(){
echo "I'm writing now......
";
}
}
class Adpater extends readandwrite{
private $obj;
function __construct(unknow $x){
$this->obj=$x;
}
}
function read(){
$this->obj->Rdata();
}
function write(){
$this->obj->Wdata();
}
}
*/
//-------------------------------------- --------------------------------
/*
【方法二】
class unknow{
function __construct(){
echo "我是地球人未知的外星儲存器,我有不同於地球儲存器的存取方式:
";
}
function Rdata(){
echo "I'm reading now......
";
}
function Wdata(){
echo "I'm writing now......
";
}
}
class Adpater extends unknow implements readandwrite{
function read(){
parent:: Rdata();
}
function write(){
parent::Wdata();
}
}
*/
//------ -------------------------------------------------- ----------------
/*
【方法三】
*/
class unknow{
function __construct(){
echo "我是地球人未知的外星儲存器,我有不同於地球儲存器的存取方式:
";
}
function Rdata (){
echo "I'm reading now......
";
}
function Wdata(){
echo "I'm writing now.... ..
";
}
}
class Adpater implements readandwrite{
private $obj;
function __construct(unknow $x){
$this->obj= $x;
}
function read(){
$this->obj->Rdata();
}
function write(){
$this->obj-$this->obj- >Wdata();
}
}
//【程式主體呼叫】
echo "物件導向程式設計—介面 font>
";
$storage1=new flash();
$computer=new motherboard($storage1);
$computer->read();
$ computer->write();
$storage2=new yingpan();
$computer=new motherboard($storage2);
$computer->read();
$computer->write ();
$storage3=new disco();
$computer=new motherboard($storage3);
$computer->read();
$computer->write();
$un_storage=new unknow();
$apdaterx=new Adpater($un_storage);
$computer=new motherboard($apdaterx);
$computer->read();
$computer->write();
?>

以上就介紹了介面抽象類別PHP中用介面、抽象類別、普通基底類別實作「面向介面程式設計」與「耦合方法」簡述,包含了介面抽象類別方面的內容,希望對PHP教學有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn