특정 유사한 클래스에 대한 작업을 통합된 "인터페이스"(여기서는 비유임) - Adapter로 변환하거나 비유적으로는 해당 클래스의 세부 사항을 통합하거나 보호하는 "인터페이스"로 변환합니다. Adapter 패턴은 또한 Adapter와 상호 작용하는 코드를 수정하지 않고도 "적응형" 클래스를 쉽게 추가하거나 삭제할 수 있도록 "메커니즘"을 구성합니다. 이는 "코드 간 결합 감소"라는 설계 원칙에 부합합니다
<?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!