コードをコピーします コードは次のとおりです:
/*
私自身が読みやすくするために公開しました。専門家からの指導を歓迎します...
[ヒント] この例は合格しました。
【シナリオ設計】
コンピューターのマザーボードの 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 class readandwrite{
abstract function read();
}
class motherboard{
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 "今書いています...
";
クラス Adpater は、不明な実装を拡張します。 /- ------------------------------------------------ -- ---------------------
/*
【方法3】
*/
class unknow{
function __construct(){
echo "私は地球人には知られていない宇宙人のストレージです:
";
}
function Rdata(){
echo "読書中です。今...
";
}
function Wdata(){
echo "今書いています...
";
}
}
class Adpater 実装 readandwrite{
private $obj;
関数 __construct(unknown $x){
$this->obj=$x;
}
関数 read(){
$this->obj->Rdata();
関数 write(){
$this->obj->Wdata();
}
}
//[プログラム本体呼び出し]
echo "オブジェクト指向プログラミング - インターフェイス< ;/font>
";
$storage1=新しいフラッシュ();
$コンピュータ=新しいマザーボード($storage1);
$コンピュータ-> ;read();
$コンピュータ-> ;write();
$storage2=新しいマザーボード($storage2);
$computer->write();ディスコ();
$コンピュータ=新しいマザーボード($storage3);
$コンピュータ->書き込み();
$apdaterx=新しいアダプタ($un_storage);
$computer=新しいマザーボード($apdaterx);
$computer->write();
http://www.bkjia.com/PHPjc/323037.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/323037.html
技術記事
次のようにコードをコピーします。 ?php /* 学習中に作成し、自分自身の読みやすさを考慮して公開しました。専門家の指導を歓迎します。 [ヒント] この例は合格しました。エラーのないテスト..