> 백엔드 개발 > PHP 튜토리얼 > 장식 모드에 대한 자세한 설명

장식 모드에 대한 자세한 설명

藏色散人
풀어 주다: 2023-04-05 20:54:01
앞으로
3040명이 탐색했습니다.

Decoration 모드

원본 클래스 파일을 변경하거나 상속을 사용하지 않고 객체의 기능을 동적으로 확장합니다. 감싸는 오브제, 즉 장식물을 생성하여 실물을 감싸는 것입니다.

데코레이션 모드의 특징

(1) 데코레이션 개체는 실제 개체와 동일한 인터페이스를 갖습니다. 이런 방식으로 클라이언트 개체는 실제 개체와 동일한 방식으로 데코레이팅된 개체와 상호 작용할 수 있습니다.

(2) 장식된 개체에는 실제 개체에 대한 참조가 포함되어 있습니다.

(3) 장식된 개체는 클라이언트의 모든 요청을 수락합니다. 이러한 요청을 실제 객체로 전달합니다.

(4) 장식 개체는 이러한 요청을 전달하기 전이나 후에 몇 가지 추가 기능을 추가할 수 있습니다. 이렇게 하면 특정 객체의 구조를 수정하지 않고도 런타임 시 외부적으로 추가 기능을 추가할 수 있습니다. 객체 지향 설계에서 특정 클래스의 기능 확장은 일반적으로 상속을 통해 구현됩니다.

장점

1. Decorator 패턴과 상속 관계의 목적은 객체의 기능을 확장하는 것이지만 Decorator는 상속보다 더 많은 유연성을 제공할 수 있습니다.

2. 다양한 특정 데코레이션 클래스와 이러한 데코레이션 클래스의 배열 및 조합을 사용하여 디자이너는 다양한 동작의 다양한 조합을 만들 수 있습니다.

단점

1. 이 기능은 상속보다 유연하지만 복잡성도 더 높습니다.

2. 장식 모드를 과도하게 사용하면 프로그램이 매우 복잡해집니다.

3. 데코레이션 모드는 추상 컴포넌트(Component) 형태의 프로그래밍을 위한 모드입니다. 그러나 특정 구성 요소에 대해 프로그래밍하는 경우 애플리케이션 아키텍처와 데코레이터가 적절한지 다시 생각해야 합니다. 물론 구성 요소 인터페이스를 변경하고, 새로운 공용 동작을 추가하고, "반투명" 데코레이터 모드를 구현할 수도 있습니다. 실제 프로젝트에서 최선의 선택을 해보세요.

php 코드 예제

작업 방법으로 작업자 클래스를 추상화하고 2개의 하위 클래스(배관공, 목수)가 작업자 인터페이스를 구현합니다.

interface worker{
public function doSomeWork();
}
//水管工
class shuiguan implements worker{
public function doSomeWork(){
echo '修水管';
}
}
//木工
class mu implements worker{
public function doSomeWork(){
echo '修门窗';
}
}
로그인 후 복사

이제 A 회사의 작업자(수도관, 목수 포함)에 대한 새로운 수요가 있습니다. ) 들어오려면 먼저 "안녕하세요!"라고 인사해야 합니다. 기본 클래스에 영향을 주지 않고 이 함수를 균일하게 구현하고 싶습니다. 장식 모드 클래스를 사용하여 구현할 수 있습니다:

//a公司工人
class aWorker implements worker{
//具体的工人
public $worker;
//构造函数获取工人
public function __construct($worker){
$this->worker  = $worker;
}
public function doSomeWork(){
echo '您好!';
$this->worker->doSomeWork();
}
}
$aWorker = new aWorker(new shuiguan());
$aWorker->doSomeWork();
로그인 후 복사

aWorker는 작업자 클래스의 인터페이스도 구현합니다. 특정 작업자 개체가 필요하며 특별한 요구 사항(안녕하세요)을 완료한 후 원래 작업자 개체의 메서드를 사용합니다. 장식모드입니다!

위 내용은 장식 모드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:hcoder.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿