欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP設(shè)計(jì)模式之裝飾者模式代碼實(shí)例

 更新時(shí)間:2015年05月11日 10:13:02   投稿:junjie  
這篇文章主要介紹了PHP設(shè)計(jì)模式之裝飾者模式代碼實(shí)例,裝飾者模式就是不修改原類代碼和繼承的情況下動(dòng)態(tài)擴(kuò)展類的功能,本文就給出了代碼實(shí)例,需要的朋友可以參考下

定義:

裝飾者模式就是不修改原類代碼和繼承的情況下動(dòng)態(tài)擴(kuò)展類的功能。傳統(tǒng)的編程模式都是子類繼承父類實(shí)現(xiàn)方法重載,使用裝飾器模式,只需添加一個(gè)新的裝飾器對(duì)象,更加靈活,避免類數(shù)量和層次過(guò)多。

角色:

Component(被裝飾對(duì)象基類)
ConcreteComponent(具體被裝飾對(duì)象)
Decorator(裝飾者基類)
ContreteDecorator(具體的裝飾者類)

示例代碼:

//被裝飾者基類
interface Component
{
  public function operation();
}
 
//裝飾者基類
abstract class Decorator implements Component
{
  protected $component;
 
  public function __construct(Component $component)
  {
    $this->component = $component;
  }
 
  public function operation()
  {
    $this->component->operation();
  }
}
 
//具體裝飾者類
class ConcreteComponent implements Component
{
  public function operation()
  {
    echo 'do operation'.PHP_EOL;
  }
}
 
//具體裝飾類A
class ConcreteDecoratorA extends Decorator {
  public function __construct(Component $component) {
    parent::__construct($component);
 
  }
 
  public function operation() {
    parent::operation();
    $this->addedOperationA();  // 新增加的操作
  }
 
  public function addedOperationA() {
    echo 'Add Operation A '.PHP_EOL;
  }
}
 
//具體裝飾類B
class ConcreteDecoratorB extends Decorator {
  public function __construct(Component $component) {
    parent::__construct($component);
 
  }
 
  public function operation() {
    parent::operation();
    $this->addedOperationB();
  }
 
  public function addedOperationB() {
    echo 'Add Operation B '.PHP_EOL;
  }
}
 
 
class Client {
 
  public static function main() {
    /*
    do operation
    Add Operation A
    */
    $decoratorA = new ConcreteDecoratorA(new ConcreteComponent());
    $decoratorA->operation();
 
 
    /*
    do operation
    Add Operation A 
    Add Operation B 
    */
    $decoratorB = new ConcreteDecoratorB($decoratorA);
    $decoratorB->operation();
  }
 
}
 
Client::main();

相關(guān)文章

最新評(píng)論