美文网首页
设计模式之装饰模式

设计模式之装饰模式

作者: 晓晨科科 | 来源:发表于2017-06-05 11:09 被阅读0次

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

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

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,代码就可以灵活组合,降低耦合。需要的类大大减少,组建系统也更加的灵活。可以更容易的增加若干新的装饰器来满足各种复杂的情况。

相关文章

  • JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计

    JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计模式 装饰器模式,又名装饰者模式。它的定义是“在不...

  • 聊聊Context

    在上篇文章《设计模式之装饰模式》中我们谈到了装饰模式,在 Android 中关于 Context 的设计就用到了装...

  • 9、结构型模式-装饰器设计模式

    1、如虎添翼的设计模式-装饰器设计模式 简介:讲解-装饰器设计模式介绍和应用场景 装饰器设计模式(Decorato...

  • Java设计模式之装饰器模式

    Java设计模式之装饰器模式 本文仅是个人观点,如有错误请指正 简介 装饰器模式(Decorator Patter...

  • Golang 设计模式之-装饰模式

    Golang 设计模式之-装饰模式 最近在温习设计模式,虽然面向对象不是go的特长,但用go实现的设计模式,比ja...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 修饰模式

    维基百科-修饰模式 php 设计模式 之 装饰模式 hero博客——装饰模式 动态的给一个对象添加一些额外的职责,...

  • Java设计模式之 —— 装饰者(Decorator) — 点

    Java设计模式之 —— 装饰者(Decorator) — 点炒饭 下面会用做炒饭的例子来描述一下装饰者设计模式,...

  • 设计模式之-装饰模式

    好了,昨天我们说完了单利模式,趁着现在想写博客就多写几篇吧. 下面开始说这个装饰模式 装饰模式其实还有做成一个类,...

  • 设计模式之装饰模式

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

网友评论

      本文标题:设计模式之装饰模式

      本文链接:https://www.haomeiwen.com/subject/vzrifxtx.html