天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP中用接口、抽象類(lèi)、普通基類(lèi)實(shí)現(xiàn)“面向接口編程”與“耦合方法”簡(jiǎn)述

復(fù)制代碼 代碼如下:
<?php
/*
邊學(xué)邊做的,為方便自己翻閱而發(fā)布,更為得到高人指點(diǎn)而發(fā)布,歡迎高手指點(diǎn)......
【提示】本例通過(guò)測(cè)試無(wú)誤
【情景設(shè)計(jì)】
模擬計(jì)算機(jī)主板IDE接口,比如:主板可以存取的儲(chǔ)存器常常有光驅(qū)、硬盤(pán)、閃存等等,
為了方便,有必要對(duì)這些不同的儲(chǔ)存器設(shè)定同一的接口。
本例還假設(shè)一種前所未有的、存取方式與眾不同的外星儲(chǔ)存器也要加到主板上進(jìn)行存取,
于是需要采用耦合的設(shè)計(jì)模式。
【本例主要講述】
1、通過(guò)接口、抽象類(lèi)、一般類(lèi)繼承三種方式達(dá)到所謂的“接口”模式,以此說(shuō)明:
A、子類(lèi)對(duì)象可以當(dāng)父類(lèi)對(duì)象用,因?yàn)樽宇?lèi)是特殊的父類(lèi)!
B、請(qǐng)注意這三種實(shí)現(xiàn)方式中接口、抽象類(lèi)和一般類(lèi)繼承的基類(lèi)寫(xiě)法!
2、接口模式真的是一紙契約!
3、程序設(shè)計(jì)之"耦合設(shè)計(jì)模式"!
*/
//----------------------------------------------------------------------
/*【方式一】接口實(shí)現(xiàn)方式:*/
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 "我是閃存:<br>";
}
function read(){
echo "開(kāi)始讀取數(shù)據(jù)......<br>";
}
function write(){
echo "開(kāi)始儲(chǔ)存數(shù)據(jù)......<hr>";
}
}
class yingpan implements readandwrite{
function __construct(){
echo "我是硬盤(pán):<br>";
}
function read(){
echo "開(kāi)始讀取數(shù)據(jù)......<br>";
}
function write(){
echo "開(kāi)始儲(chǔ)存數(shù)據(jù)......<hr>";
}
}
class disco implements readandwrite{
function __construct(){
echo "我是光盤(pán):<br>";
}
function read(){
echo "開(kāi)始讀取數(shù)據(jù)......<br>";
}
function write(){
echo "開(kāi)始儲(chǔ)存數(shù)據(jù)......<hr>";
}
}
//----------------------------------------------------------------------
/*【方式二】抽象類(lèi)實(shí)現(xiàn)方式:
abstract class readandwrite{
abstract function read();
abstract 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 extends readandwrite{
function __construct(){
echo "我是閃存:<br>";
}
function read(){
echo "開(kāi)始讀取數(shù)據(jù)......<br>";
}
function write(){
echo "開(kāi)始儲(chǔ)存數(shù)據(jù)......<hr>";
}
}
class yingpan extends readandwrite{
function __construct(){
echo "我是硬盤(pán):<br>";
}
function read(){
echo "開(kāi)始讀取數(shù)據(jù)......<br>";
}
function write(){
echo "開(kāi)始儲(chǔ)存數(shù)據(jù)......<hr>";
}
}
class disco extends readandwrite{
function __construct(){
echo "我是光盤(pán):<br>";
}
function read(){
echo "開(kāi)始讀取數(shù)據(jù)......<br>";
}
function write(){
echo "開(kāi)始儲(chǔ)存數(shù)據(jù)......<hr>";
}
}
*/
//----------------------------------------------------------------------
//【方式三】一般類(lèi)繼承實(shí)現(xiàn)方式:
/*
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 "我是閃存:<br>";
}
function read(){
echo "開(kāi)始讀取數(shù)據(jù)......<br>";
}
function write(){
echo "開(kāi)始儲(chǔ)存數(shù)據(jù)......<hr>";
}
}
class yingpan extends readandwrite{
function __construct(){
echo "我是硬盤(pán):<br>";
}
function read(){
echo "開(kāi)始讀取數(shù)據(jù)......<br>";
}
function write(){
echo "開(kāi)始儲(chǔ)存數(shù)據(jù)......<hr>";
}
}
class disco extends readandwrite{
function __construct(){
echo "我是光盤(pán):<br>";
}
function read(){
echo "開(kāi)始讀取數(shù)據(jù)......<br>";
}
function write(){
echo "開(kāi)始儲(chǔ)存數(shù)據(jù)......<hr>";
}
}
*/
//----------------------------------------------------------------------
/*
【耦合模式】
耦合模式就是將不同標(biāo)準(zhǔn)的兩個(gè)類(lèi)(本例的接口、抽象類(lèi)、普通基類(lèi)與外星儲(chǔ)存器有不同的存取方法),
通過(guò)中間轉(zhuǎn)換器,達(dá)到同一標(biāo)準(zhǔn)的目的,就像轉(zhuǎn)接線一樣――本例就是將unknow類(lèi)的Rdata、Wdata方法轉(zhuǎn)
換成read、write方法,達(dá)到和本例的接口、抽象類(lèi)、普通基類(lèi)相同的存取方法, 本例的中間轉(zhuǎn)換器是
Apdater類(lèi)。
由于php中只能繼承一個(gè)類(lèi)但可以繼承多個(gè)接口,所以產(chǎn)生了三種耦合方法:
方法一:中間轉(zhuǎn)換器Apdater類(lèi)繼承抽象類(lèi)或普通基類(lèi),但由于php中只能繼承一個(gè)類(lèi),所以在Apdater
類(lèi)中定義一個(gè)外星存儲(chǔ)器類(lèi)unknow的對(duì)象,并用重載繼承的抽象類(lèi)或普通基類(lèi)的存取方法的方式來(lái)轉(zhuǎn)
換存取方法,達(dá)到同一存取方法的目的。
方法二:中間轉(zhuǎn)換器Apdater類(lèi)繼承外星存儲(chǔ)器類(lèi)unknow、接口,此時(shí)可以直接用Apdater類(lèi)的存取方法
(parent::Rdata()與parent::Wdata()――php中子類(lèi)調(diào)用父類(lèi)方法的方式),和實(shí)現(xiàn)接口規(guī)定方法,
來(lái)轉(zhuǎn)換存取方法,達(dá)到同一存取方法的目的。
方法三:與方法一雷同,只是改為繼承(實(shí)現(xiàn))接口;
*/
//----------------------------------------------------------------------
/*
【方法一】
*/
/*
class unknow{
function __construct(){
echo "<font color=#ff0000>我是地球人未知的外星儲(chǔ)存器,我有不同于地球儲(chǔ)存器的存取方式:</font><br>";
}
function Rdata(){
echo "I'm reading now......<br>";
}
function Wdata(){
echo "I'm writing now......<hr>";
}
}
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 "<font color=#ff0000>我是地球人未知的外星儲(chǔ)存器,我有不同于地球儲(chǔ)存器的存取方式:</font><br>";
}
function Rdata(){
echo "I'm reading now......<br>";
}
function Wdata(){
echo "I'm writing now......<hr>";
}
}
class Adpater extends unknow implements readandwrite{
function read(){
parent::Rdata();
}
function write(){
parent::Wdata();
}
}
*/
//------------------------------------------------------------------------
/*
【方法三】
*/
class unknow{
function __construct(){
echo "<font color=#ff0000>我是地球人未知的外星儲(chǔ)存器,我有不同于地球儲(chǔ)存器的存取方式:</font><br>";
}
function Rdata(){
echo "I'm reading now......<br>";
}
function Wdata(){
echo "I'm writing now......<hr>";
}
}
class Adpater implements readandwrite{
private $obj;
function __construct(unknow $x){
$this->obj=$x;
}
function read(){
$this->obj->Rdata();
}
function write(){
$this->obj->Wdata();
}
}
//【程序主體調(diào)用】
echo "<strong><font color=#990000 size=20px>面向?qū)ο蟪绦蛟O(shè)計(jì)――接口</font></strong><hr>";
$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技術(shù)PHP中用接口、抽象類(lèi)、普通基類(lèi)實(shí)現(xiàn)“面向接口編程”與“耦合方法”簡(jiǎn)述,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 蜜柚影院在线观看免费高清中文 | 97se se| 亚洲国产日韩欧美高清片a 亚洲国产日韩a精品乱码 | 全免费午夜一级毛片 | 俄罗斯女人Z0Z0极品 | 精品久久久久亚洲 | 国产又湿又黄又硬又刺激视频 | 亚洲精品一区二区在线看片 | 亚洲青青青网伊人精品 | 欧美 亚洲 中文字幕 高清 | 最新无码专区在线视频 | 午夜福到在线4国产 | 午夜想想爱午夜剧场 | 成人1000部免费观看视频 | 老板揉搓秘书丰满大乳 | 成人国产精品玖玖热色欲 | 99久久网站| 国产人妻人伦精品熟女麻豆 | 青青青视频在线 | 四川老师边上网课边被啪视频 | 综合久久伊人 | 色爱AV综合区 | 国产亚洲视频精彩在线播放 | 花蝴蝶免费版高清版 | 99精品视频在线观看免费 | 久久国产伦子伦精品 | 棉袜足j吐奶视频 | 欧美午夜精品A片一区二区HD | 第一次破女初国产美女 | 亚洲色欲H网在线观看 | 亚洲中文字幕乱码熟女在线 | 精品亚洲永久免费精品 | 爱啪国产精品视频在线 | 妈妈的职业3完整版在线播放 | 少女10声大哥喊退色狼 | 国产品无码一区二区三区在线 | 日韩亚洲国产中文字幕欧美 | 丰满老熟好大bbbxxx | 97色伦97色伦国产 | 久久re这里视频只精品首页 | 白丝萝莉喷水 |