特定の類似クラスの操作を統一された「インターフェース」 (ここに比喩があります) - アダプター、または比喩的に言えば、それらのクラスの詳細を統一または保護する「インターフェース」として変換します。 アダプター パターンは、アダプターと対話するコードを変更することなく、「アダプティブ」クラスを簡単に追加または削除できる「メカニズム」も構築します。これは、「コード間の結合を減らす」という設計原則に沿っています
<?php /* * 适配器模式 */ abstract class Toy { public abstract function openMouth(); public abstract function closeMouth(); } class Dog extends Toy { public function openMouth() { echo "Dog open Mouth\n"; } public function closeMouth() { echo "Dog close Mouth\n"; } } class Cat extends Toy { public function openMouth() { echo "Cat open Mouth\n"; } public function closeMouth() { echo "Cat close Mouth\n"; } } //目标角色:红枣遥控公司 interface RedTarget { public function doMouthOpen(); public function doMouthClose(); } //目标角色:绿枣遥控公司及 interface GreenTarget { public function operateMouth($type = 0); } //类适配器角色:红枣遥控公司 class RedAdapter implements RedTarget { private $adaptee; function __construct(Toy $adaptee) { $this->adaptee = $adaptee; } //委派调用Adaptee的sampleMethod1方法 public function doMouthOpen() { $this->adaptee->openMouth(); } public function doMouthClose() { $this->adaptee->closeMouth(); } } //类适配器角色:绿枣遥控公司 class GreenAdapter implements GreenTarget { private $adaptee; function __construct(Toy $adaptee) { $this->adaptee = $adaptee; } //委派调用Adaptee:GreenTarget的operateMouth方法 public function operateMouth($type = 0) { if ($type) { $this->adaptee->openMouth(); } else { $this->adaptee->closeMouth(); } } } class testDriver //客户端,客户想要那种就实现那种 { public function run() { //实例化一只狗玩具 $adaptee_dog = new Dog(); echo "没有适配器的普通模式"; $adaptee_dog->openMouth(); $adaptee_dog->closeMouth(); echo "给狗套上红枣适配器\n"; $adapter_red = new RedAdapter($adaptee_dog); //张嘴 $adapter_red->doMouthOpen(); //闭嘴 $adapter_red->doMouthClose(); echo "给狗套上绿枣适配器\n"; $adapter_green = new GreenAdapter($adaptee_dog); //张嘴 $adapter_green->operateMouth(1); //闭嘴 $adapter_green->operateMouth(0); } } $test = new testDriver(); $test->run();
アダプター パターンは、既存のインターフェイスをクライアント クラスが期待するインターフェイスに変換し、既存のクラスの再利用を実現します
関連する推奨事項:
以上がPHPデザインパターンのアダプターパターンの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。