Decorator 템플릿Model은 클래스의 기능을 동적으로 추가하고 수정할 수 있습니다. 클래스는 추가 기능을 수정하고 추가하려는 경우 기존 프로그래밍에서 이를 상속하는 하위 클래스를 작성하고 메서드를 다시 구현합니다. 클래스의 경우 데코레이터 모드를 사용하고 최대 유연성을 얻으려면 런타임에 데코레이터object만 추가하면 됩니다
<?php /* * 装饰模式 */ abstract class Beverage { public $_name; abstract public function Cost(); } // 被装饰者类 class Coffee extends Beverage { public function construct() { $this->_name = 'Coffee'; } public function Cost() { return 1.00; } } // 以下三个类是装饰者相关类 class CondimentDecorator extends Beverage //装饰类 { public function construct() { $this->_name = 'Condiment'; } public function Cost() { return 0.1; } } class Milk extends CondimentDecorator //牛奶 配料 --装饰者 { public $_beverage; public function construct($beverage) { if ($beverage instanceof Beverage) { $this->_beverage = $beverage; } else exit('Failure'); } public function Cost() { return $this->_beverage->Cost() + 0.2; } } class Sugar extends CondimentDecorator //糖 配料 --装饰者 { public $_beverage; public function construct($beverage) { $this->_name = 'Sugar'; if ($beverage instanceof Beverage) { $this->_beverage = $beverage; } else { exit('Failure'); } } public function Cost() { return $this->_beverage->Cost() + 0.2; } } // Test Case //1.拿杯咖啡 $coffee = new Coffee(); //2.加点牛奶 $coffee = new Milk($coffee); //3.加点糖 $coffee = new Sugar($coffee); echo $coffee->Cost(); echo $coffee->_name;
데코레이션 모드는 시스템을 줄입니다. 결합 정도에 따라 책임이 허용됩니다. 동적으로 추가되거나 삭제될 객체의 수와 데코레이션이 필요한 특정 컴포넌트 클래스 및 특정 데코레이션 클래스를 독립적으로 변경할 수 있으므로 새로운 특정 컴포넌트 클래스 및 특정 데코레이션 클래스를 추가할 수 있습니다
관련 추천:
위 내용은 PHP 디자인 패턴 중 데코레이터 패턴에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!