Adapter 패턴(Adapter Pattern)
Adapter 패턴은 구조적 패턴 중 하나입니다. Adapter 패턴을 통해 기존 클래스(또는 외부 클래스)의 인터페이스 형태를 변경할 수 있습니다.
Adapter 패턴 적용 시나리오
대규모 시스템 개발 과정에서 다음과 같은 상황에 직면하는 경우가 많습니다.
특정 기능을 구현해야 하는데 이러한 기능 중 하나 이상이 아직 성숙되지 않았습니다. 외부 구성 요소, 이러한 기능을 자체 개발하는 경우 많은 시간이 소요되므로 임시로 외부 구성 요소를 사용하고 나중에 언제든지 교체하는 것을 고려하게 됩니다. 하지만 이로 인해 문제가 발생할 수 있습니다. 외부 구성 요소 라이브러리를 교체하면 외부 구성 요소를 참조하는 소스 코드를 광범위하게 수정해야 할 수 있으므로 새로운 문제가 발생할 가능성이 매우 높습니다. 수정 영역을 최소화하는 방법은 무엇입니까? 이와 유사한 요구를 위해 어댑터 패턴이 제안되었습니다. Adapter 패턴은 구현될 기능을 추상화하는 새 인터페이스와 인터페이스를 구현하는 Adapter 클래스를 정의하여 외부 구성 요소를 투명하게 호출합니다. 이런 식으로 외부 구성 요소를 교체할 때 최대 몇 개의 Adapter 클래스만 수정하면 되며 다른 소스 코드는 영향을 받지 않습니다.
php example
기사 목록과 자세한 정보 표시를 완료한 기사 클래스가 있다고 가정해 보겠습니다.
<?php class article{ //文章列表获取方法 public function getLIst(){ echo '获取文章列表'; } //根据文章id获取文章的标题和内容 public function getInfo($id){ echo '根据文章id获取文章的标题和内容'; } } $art = new article(); $art->getInfo(1);
프로젝트 요구 사항으로 인해 이제 이러한 기능이 필요합니다. 기사 세부 정보를 얻을 때 기사 작성 시간도 확인하고 기사를 읽은 횟수도 업데이트해야 합니다.
어댑터 모드를 사용하지 않으면 먼저 기사 클래스의 소스 코드를 수정하여 이러한 기능을 추가하는 것이 좋습니다. 이렇게 생각하는 이유는 위의 예제 코드가 매우 간단하기 때문입니다. 수천 줄이면 어떨까요? getInfo() 코드가 매우 복잡하면 어떻게 되나요?
이 모든 것을 해결하려면 어댑터 모드를 사용하세요!
class articleAdapter{ public $_artObj; public function __construct($artObj){ $this->_artObj = $artObj; } public function getInfo($id){ $this->_artObj->getInfo($id); } public function getInfoAndUpdate($id){ //利用$this->_artObj查询符合要求的文章数据并更新浏览次数 echo '$this->_artObj查询符合要求的文章数据并更新浏览次数'; } } $art = new articleAdapter(new article()); $art->getInfo(12); $art->getInfoAndUpdate(12);
상속을 사용하면 어떨까요?
객체 어댑터: 상속을 통해 처리되지 않고 객체 조합을 통해 처리됩니다. OO 디자인 원리를 공부한 만큼 상속에 비해 조합이 권장되는 방식입니다.
클래스 어댑터: 상속을 통해 구현되며 기존 시스템의 메서드를 캡슐화합니다. 어댑터 간 개체 어댑터를 변환하는 과정에서 클래스 어댑터는 의심할 여지 없이 완성될 수 있지만 종속성이 증가하고 적응 요구 사항의 유연성으로 인해 상속을 통해 확장을 제어하기가 어려워질 수 있습니다.
일반적으로 클래스 어댑터는 유연성이 떨어지는 반면 개체 어댑터는 종속성 주입이나 구성을 통해 수행할 수 있는 방법입니다. 클래스 어댑터는 이전 시스템의 클래스에서 상속받아야 하는데, 이는 의심할 여지 없이 좋은 생각이 아닙니다.
위 내용은 어댑터 모드란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!