注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

php开发lamp

《西安--木木》-经历丰富了生活。 架构师QQ群: 246695517

 
 
 

日志

 
 

装饰器模式decorate  

2018-03-12 14:25:26|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

<?php
/**
* 装饰器模式decorate
*/

/**
* Component充当抽象构件类,其子类Window、TextBox、ListBox充当具体构件类,
* Component类的另一个子类ComponentDecorator充当抽象装饰类,
* ComponentDecorator的子类ScrollBarDecorator和BlackBorderDecorator充当具体装饰类
*/
//抽象界面构件类:抽象构件类,为了突出与模式相关的核心代码,对原有控件代码进行了大量的简化
abstract class Component
{
public abstract function display();
}

//窗体类:具体构件类
class Window extends Component
{
public function display()
{
print("显示窗体!<br/>");
}
}

//文本框类:具体构件类
class TextBox extends Component
{
public function display()
{
print("显示文本框!<br/>");
}
}

//列表框类:具体构件类
class ListBox extends Component
{
public function display()
{
print("显示列表框!<br/>");
}
}

//构件装饰类:抽象装饰类 abstract可以添加抽象方法在子类实现
class ComponentDecorator extends Component
{
private $component; //维持对抽象构件类型对象的引用

public function __construct(Component $component) //注入抽象构件类型的对象
{
$this->component = $component;
}

public function display()
{
$this->component->display();
}
}

//滚动条装饰类:具体装饰类
class ScrollBarDecorator extends ComponentDecorator
{

public function display()
{
parent::display();
$this->setScrollBar();
}

public function setScrollBar()
{
print("为构件增加滚动条!<br/>");
}
}

//黑色边框装饰类:具体装饰类
class BlackBorderDecorator extends ComponentDecorator
{
public function display()
{
parent::display();
$this->setBlackBorder();
}

public function setBlackBorder()
{
print("为构件增加黑色边框!<br/>");
}
}

//客户端

$component = new Window();
$componentSB = new ScrollBarDecorator($component);
$componentBB = new BlackBorderDecorator($componentSB); //将装饰了一次之后的对象继续注入到另一个装饰类中,进行第二次装饰
$componentBB->display();


  评论这张
 
阅读(24)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018