コードをコピーします コードは次のとおりです:
/*
私自身の読書の便宜のために出版されており、専門家の指導も歓迎しています。
[ヒント] この例は、エラーなしでテストに合格しました。
【シナリオ設計】
コンピューターのマザーボードの IDE インターフェイスをシミュレートします。たとえば、マザーボードがアクセスできるストレージには、光学ドライブ、ハードディスク、フラッシュ メモリなどが含まれます。
便宜上、これらの異なるストレージに同じインターフェースを設定する必要があります。
この例では、独自のアクセス方法を持つ前例のないエイリアン メモリもアクセスのためにマザーボードに追加されることを想定しています。
そのため、結合された設計パターンを採用する必要があります。
[この例の主な説明]
1. いわゆる「インターフェイス」モードは、インターフェイス、抽象クラス、および一般クラスの継承によって実現されます。
A. サブクラス オブジェクトを親クラスとして使用できます。サブクラスは特別な親クラスであるため、オブジェクトです。
B. この3つの実装方法では、インターフェース、抽象クラス、一般クラスの継承の基底クラスの書き方に注目してください!
2. インターフェースモードは本当に契約です!
3. プログラミングの「結合設計パターン」!
*/
//------------------------------------------ ------ ------------------------
/*[方法 1] インターフェース実装メソッド:*/
interface readandwrite{
関数 read();
関数 write();
クラス マザーボード{
関数 __construct(readandwrite $obj){
$this->storage=$obj;
関数 read(){
$this->storage->read();
}
function write(){
$this->storage->write();
}
class flash は readandwrite{
function __construct( ){
echo "I フラッシュメモリです:
";
}
function read(){
echo "データの読み取りを開始します...
";
}
function write(){
echo "データの保存を開始します...
";
}
}
class yingpanimplements readandwrite{
function __construct(){
echo "私はハードディスクです:
"; function read(){
echo "データの読み取りを開始...
";
}
function write(){
echo "データの保存を開始...
"
}
}
class disco readandwrite{
function __construct(){
echo "私は CD です:
";
}
function read(){
echo "データの読み取りを開始します...
";
function write(){
echo "データの保存を開始します...
"
}
}
//------ ------- ------------------------------------------- ---
/*[メソッド 2] 抽象クラスの実装:
abstract function read();
abstract function write();
}
function __construct(readandwrite $obj){
$this- >storage=$obj;
}
関数 read(){
$this->storage->read();
}
function write(){
$this->storage->write() ;
}
}
class flash extends readandwrite{
function __construct(){
echo "私は flash:
";
}
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 "私は CD です:
";
}
function read(){
echo "データの読み取りを開始します...
";
}
function write(){
echo "データの保存を開始します...< ;hr>";
}
}
*/
//----------- ------------------------ ------------------------ -------
//[方法 3] 一般的なクラス継承の実装方法:
/ *
class readandwrite{
function read(){
echo "reading...." ;
}
function write(){
echo "書き込み....."
}
}
class motherboard{
function __construct(readandwrite $obj){
$this->storage=$obj;
}
関数 read(){
$this->storage->read();
}
関数 write(){
$this->storage-> write();
}
}
class flash extends readandwrite{
function __construct( ){
echo "私はフラッシュメモリです:
";
}
function read(){
echo "データの読み取りを開始します。 .
";
}
function write(){
echo "データの保存を開始...
";
}
}
class yingpan extends readandwrite{
function __construct(){
echo "I私はハードディスクです:
";
}
function read(){
echo "データの読み取りを開始します...
";
}
function write(){
echo "データの保存を開始します。 .
";
}
}
class disco extends readandwrite{
function __construct(){
echo "私は CD:
";
}
function read(){
echo "読み始めるデータ...
";
}
function write(){
echo "データの保存を開始...
";
}
}
*/
//------ -------------------------------------------------- - ------------
/*
[結合モード]
結合モードは、規格の異なる 2 つのクラスを結合することです (この場合、インターフェイス、抽象クラス、通常の基底クラス、エイリアン ストレージは異なるアクセス方法)、
パッチコードと同じように、同じ標準を達成するために中間コンバーターを介して - この例では、未知のクラスの Rdata メソッドと Wdata メソッドが、これと同じ結果を達成するために読み取りメソッドと書き込みメソッドに変換されます
例 インターフェイス、抽象クラス、および通常の基本クラスは同じアクセス メソッドを持ちます。この例の中間コンバータは
Apdater クラスです。
PHPではクラスは1つしか継承できませんが、インターフェースは複数継承できるため、3つの結合方法が生成されました:
方法1: 中間コンバータApdaterクラスは抽象クラスまたは通常の基底クラスを継承しますが、PHPは1つのクラスしか継承できないため、そこで、Apdaterクラスにエイリアンメモリクラスの未知のオブジェクトを定義し、継承した抽象クラスや通常の基底クラスのアクセスメソッドをオーバーロードする方法を用いて、同じアクセスメソッドを実現するようにアクセスメソッドを変換します。
方法 2: 中間コンバーター Apdater クラスは、不明なエイリアン メモリ クラスとインターフェイスを継承します。このとき、Apdater クラスのアクセス メソッド (parent::Rdata() およびparent::Wdata() - PHP) を直接使用できます。 neutron クラスの親クラスのメソッドを呼び出すメソッド) を実装し、同じアクセスメソッドの目的を達成するためにアクセスメソッドを変換する
インターフェース指定メソッドを実装します。
方法 3: インターフェースを継承 (実装) する点を除いて、方法 1 と同じです。 - -----------------------------------------------
/ *
【方法1】
*/
/*
class unknow{
function __construct(){
echo "
私は地球人に知られていないエイリアンストレージです。メソッド: ";
}
function Rdata(){
echo "今読んでいます...
";
}
function Wdata() {
echo "今書いています...
"
}
}
class Adpater extends readandwrite{
function __construct(unknow $x){
$this->obj = $x;
}
関数 read(){
$this->obj->Rdata();
関数 write(){
$this->obj->Wdata(); }
*/
//------------------------------------------ ----- ----------------------------
/*
【方法2】
class unknown{
function __construct() {
echo "< ;font color=#ff0000>私は地球人には知られていない異星人のストレージです。私は地球のストレージとは異なるアクセス方法を持っています:
";
}
function Rdata(){
echo "今読んでいます...
";
}
function Wdata(){
echo "今書いています...
"
}
}
class Adpater extends不明な実装は readandwrite{
function read(){
parent::Rdata();
}
function write(){
parent::Wdata();
}
}
*/
//- ----- -------------------------------------- ----- ----------------
/*
【方法3】
*/
class unknow{
function __construct(){
echo "
私は地球人には知られていない異星人のストレージです。私は地球のストレージとは異なるアクセス方法を持っています: ";
}
function Rdata(){
echo "今読んでいます...
}
function Wdata(){
echo "今書いています...
";
}
}
class Adpater は readandwrite を実装します{
private $obj;
function __construct(unknown $x ){
$this->obj=$x;
}
関数 read(){
$this->obj->Rdata();
}
$this->obj ->Wdata();
}
}
//[プログラム本体呼び出し]
echo "
オブジェクト指向プログラミング - インターフェイス強力>
";
$storage1=新しいフラッシュ();
$コンピュータ=新しいマザーボード($storage1);
$コンピュータ->読み取り();
$コンピュータ->書き込み();
$ storage2=新しいyingpan();
$computer=新しいマザーボード($storage2);
$computer->
$storage3=新しいディスコ(); =新しいマザーボード($storage3);
$computer->write();
$apdaterx=新しいアダプター($un_storage);コンピューター=新しいマザーボード($apdaterx);
$コンピューター->書き込み();
以上は、PHP のインターフェイス抽象クラスの簡単な紹介であり、インターフェイス、抽象クラス、および通常の基底クラスを使用して「インターフェイス指向プログラミング」と「結合メソッド」を実装するためのインターフェイス抽象クラスの内容も含めて説明します。 PHP チュートリアルに興味がある人は役に立つでしょう。