设计模式之装饰模式

将所有功能建立在继承体系上会导致系统中的类爆炸式的增多。更糟糕的是当你尝试继承数上不同的分支做相似的修改时,代码会产生重复。

装饰模式是解决此类问题很好的办法。代码如下

bstract class tile{

abstract function getWealthFactor();

}

class Plains extends tile(){

private $wealthFactor = 2;

function getWealthFactor(){

return $this->wealthFactor;

}

}

//重点代码

abstract class tileDecorator extends tile(){

protected $tile;

function __construct($tile){

$this->tile = $tile;

}

}

class diamondDecorator extends tileDecorator(){

function getWealthFactor(){

return $this->tile->getWealthFactor()+2;

}

}

class pollutionDecorator extends tileDecorator(){

function getWealthFactor(){

return $this->tile->getWealthFactor()-4;

}

}

$Plains = new Plains();

$Plains->getWealthFactor; //2

$tile = new diamondDecorator(new Plains());

$tile->getWealthFactor();//4

$tile = new pollutionDecorator(new diamondDecorator(new Plains()))

$tile->getWealthFactor();//0

若不用装饰模式,那么则既有污染又有钻石的情况又需要增加一个新类来继承。

若如代码所示,加一个区域装饰器tileDecorator,代码就可以灵活组合,降低耦合。需要的类大大减少,组建系统也更加的灵活。可以更容易的增加若干新的装饰器来满足各种复杂的情况。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 1、装饰模式定义: 装饰模式是在不必改变原来对象代码,也不继承该对象的情况下,动态的扩展该对象的功能若要扩展对象功...
    勤劳的小手阅读 280评论 0 0
  • 1 场景问题# 1.1 复杂的奖金计算## 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂...
    七寸知架构阅读 4,071评论 4 67
  • 装饰模式 定义 装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一...
    晨鸣code阅读 1,398评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,147评论 19 139