이전 기사 "A Brief Talk on the Decorator Pattern in PHP"에서 PHP의 데코레이터 패턴을 소개했습니다. 이 기사에서는 PHP의 어댑터 패턴을 이해하는 데 도움이 됩니다.
이 모델에는 항상 매우 고전적인 예가 있었는데 바로 소켓입니다! 맞습니다. 해외에서 가전제품을 구매하거나 해외 출장을 갈 때, 우리나라의 전압 규격은 220V인 반면 다른 나라의 전압 규격은 110V이기 때문에 전원 어댑터가 필요한 경우가 많습니다. 그리고 이 전원 어댑터는 어댑터 모드의 상징입니다. 개체가 요구 사항을 충족하지 않으면 어댑터를 추가하세요! !
GoF 정의: 클래스의 인터페이스를 고객이 원하는 다른 인터페이스로 변환합니다. Adapter 패턴을 사용하면 호환되지 않는 인터페이스로 인해 원래 함께 작동할 수 없었던 클래스가 함께 작동할 수 있습니다.
GoF 클래스 다이어그램:Inherited
Combined
코드 구현interface Target{
function Request() : void;
}
class Adapter implements Target{ private $adaptee; function __constuct($adaptee){ $this->adaptee = $adaptee; } function Request() : void { $this->adaptee->SpecificRequest(); } }
어댑터는 Request() 메서드를 구현할 수 있도록 이 인터페이스 계약을 구현합니다. 실제로 call은 Adaptee 클래스의 메소드입니다
class Adaptee { function SpecificRequest() : void{ echo "I'm China Standard!"; } }
풀 코드: 어댑터 모드
https:/ /github .com/zhangyue0503/designpatterns-php/blob/master/05.adapter/source/adapter.phpExample
전체 소스 코드: SMS 전송 어댑터 방법
https://github.com/zhangyue0503/designpatterns-php/blob/master/05.adapter/source/adapter- 메시지 .php<?php class Message{ public function send(){ echo "阿里云发送短信!" . PHP_EOL; } public function push(){ echo "阿里云发送推送!" . PHP_EOL; } } class JiguangSDKAdapter extends Message{ private $message; public function __construct($message){ $this->message = $message; } public function send(){ $this->message->send_out_msg(); } public function push(){ $this->message->push_msg(); } } class JiguangMessage{ public function send_out_msg(){ echo "极光发送短信!" . PHP_EOL; } public function push_msg(){ echo "极光发送推送!" . PHP_EOL; } } class BaiduYunSDKAdapter extends Message{ private $message; public function __construct($message){ $this->message = $message; } public function send(){ $this->message->transmission_msg(); } public function push(){ $this->message->transmission_push(); } } class BaiduYunMessage{ public function transmission_msg(){ echo "百度云发送短信!" . PHP_EOL; } public function transmission_push(){ echo "百度云发送推送!" . PHP_EOL; } } $jiguangMessage = new JiguangMessage(); $baiduYunMessage = new BaiduYunMessage(); $message = new Message(); // 原来的老系统发短信,使用阿里云 $message->send(); $message->push(); // 部分模块用极光发吧 $jgAdatper = new JiguangSDKAdapter($jiguangMessage); $jgAdatper->send(); $jgAdatper->push(); // 部分模块用百度云发吧 $bdAatper = new BaiduYunSDKAdapter($baiduYunMessage); $bdAatper->send(); $bdAatper->push();로그인 후 복사설명:
- 이 예에서는 두 개의 SDK를 적용해야 하기 때문에 두 개의 어댑터가 있습니다. 전력 변환기가 하나만 있을 수 있다고 누가 말했습니까? 일부 마법의 국가가 500V를 사용하더라도 여전히 더 많은 전력 변환기를 가져오면 어떨까요? Message 클래스는 이전에 작성된 코드이고 그 안에 일부 공용 메서드가 있을 수 있으므로 인터페이스 추상화가 없기 때문에 Message 클래스를 상속합니다. 코드를 리팩터링할 때 추상 인터페이스 추출을 고려할 수 있지만 여기서는 어댑터가 인터페이스를 대상으로 할 수 있을 뿐만 아니라 원본 개체와 일치하는 한 아무 것도 상속하지 않아도 괜찮다는 점을 보여주기 위한 것입니다. .결국, 우리는 약한 유형의 언어입니다. Java와 유사한 강력한 유형이라면 여전히 상속이나 구현이 필요합니다(다형성)
- 결합된 어댑터는 데코레이터와 유사하며 외부 개체를 유지 관리합니다. 클래스의 메소드는 함수를 추가하는 데 사용되는 반면, 어댑터는 함수를 추가하는 경우가 거의 없지만 Laravel의 Filesystem 모듈을 직접 대체합니다. 분명히 말할 것은 없습니다. 어댑터 패턴을 사용하는 여러분, 잘 공부하세요
- 클래스를 사용하고 싶지만 제공되는 내용이 비즈니스와 맞지 않거나 다른 관련 클래스와 함께 사용할 수 있는 클래스를 만들고 싶을 때; 예상치 못한 수업이 함께 작동한다면 어댑터 패턴을 사용해 보는 것이 좋습니다
- 추천 학습: "
- PHP 비디오 튜토리얼
"위 내용은 한 기사에서 PHP의 어댑터 패턴에 대해 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!