ホームページ >バックエンド開発 >PHPチュートリアル >PHP デザイン パターン シリーズ - Adaptor_PHP チュートリアル
アダプターとは:
アダプター設計パターンは、あるオブジェクトのインターフェースを、別のオブジェクトが予期するインターフェースに単純に適合させます。
デザインシナリオ:
最初にユーザー情報を提供するクラスである UserInfo クラスがあったとします。このクラスを初期に設計したとき、ユーザー名を取得するための getUserName メソッドのみを実装しました。
MyOldObject クラスでは、UserInfo クラスからユーザー情報を取得し、ユーザー名を出力します
時間が経つにつれて、古い UserInfo クラスはユーザー名を取得するメソッドしか提供しなくなり、ユーザーの年齢やその他の情報も取得する必要がなくなりました。
元のUserInfoクラスを変更しないように、UserInfoを継承してUserInfoAdapterクラスを作成し、年齢を取得するgetAgeなどのメソッドを実装します。
新しい MyNewObject クラスでは、UserInfoAdapter をインスタンス化し、ユーザーの名前と年齢を出力します。
このようにして、拡張するときに、元の UserInfo クラスとこのクラスを使用するインターフェイスを変更せずに、適応メソッドを通じて UserInfo クラスを拡張します
。
コード: UserInfo クラス、getUserName メソッドを実装します
[php]
//初期のユーザー クラスはユーザー名を取得するメソッドのみを実装していました
クラス UserInfo {
パブリック関数 getUserName() {
'initphp' を返します
}
}
コード: MyOldObject クラス、UserInfo クラスから情報を取得、ユーザー名を出力
[php]
include_once("UserInfo.php");
クラス MyOldObject {
パブリック関数 write() {
$UserInfo = 新しいユーザー情報
echo $UserInfo->getUserName();
}
}
$a = 新しい MyOldObject
$a->write();
コード: UserInfoAdapter クラス。時間の経過とともに、プロジェクトの要件は変化しており、UserInfo クラスでは新しい機能のニーズを満たすことができないようになりました。
[php]
include_once("UserInfo.php");
class UserInfoAdapter extends UserInfo{
パブリック関数 getUserAge() {
28 を返します。
}
パブリック関数 getUser() {
return array(
'ユーザー名' => $this->getUserName(),
'年齢' =>$this->getUserAge()
);
}
}
コード: 新しい関数クラスである MyNewObject クラスは、ユーザーの年齢と名前を出力する必要があります。UserInfo クラスではニーズを満たすことができず、UserInfoAdapter アダプター クラスを呼び出す必要があります
。
[php]
include_once("UserInfoAdapter.php");
クラス MyNewObject {
パブリック関数 write() {
$UserInfoAdapter = 新しい UserInfoAdapter;
print_r($UserInfoAdapter->getUser());
}
}
$a = 新しい MyNewObject
;
$a->write();
作者: initphp
http://www.bkjia.com/PHPjc/478142.html
www.bkjia.com
本当