Decorator templateModelは、クラスの機能を動的に追加および変更できます。 クラスが提供する機能を変更および追加したい場合、従来のプログラミングでは、それを継承するサブクラスを作成し、そのメソッドを再実装します。クラスのデコレータモードを使用し、実行時にデコレータオブジェクトを追加するだけで最大限の柔軟性を実現できます
<?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 中国語 Web サイトの他の関連記事を参照してください。