装饰者模式

转载 2015年11月18日 22:35:23

转载地址:http://blog.csdn.net/wzllai/article/details/7835904

扩展一个类一般可以使用继承或者组合的形式。使用继承的方式扩展时,随着基类子类的增多,以及子类的子类出现,继而出现了代码的无限制膨胀,增加了系统的复杂性。而使用装饰者模式既继承又引用,能动态扩展类的一些功能,减少了继承数量。

装饰纸UML类图:


php代码实例(出自php设计模式)
/**
 * 装饰模式
 */
 
/**
 * 抽象构件角色
 */
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();
    }
}
 
/**
 * 具体装饰类A
 */
class ConcreteDecoratorA extends Decorator {
    public function __construct(Component $component) {
        parent::__construct($component);
 
    }
 
    public function operation() {
        parent::operation();    //  调用装饰类的操作
        $this->addedOperationA();   //  新增加的操作
    }
 
    /**
     * 新增加的操作A,即装饰上的功能
     */
    public function addedOperationA() {
        echo 'Add Operation A <br />';
    }
}
 
/**
 * 具体装饰类B
 */
class ConcreteDecoratorB extends Decorator {
    public function __construct(Component $component) {
        parent::__construct($component);
 
    }
 
    public function operation() {
        parent::operation();
        $this->addedOperationB();
    }
 
    /**
     * 新增加的操作B,即装饰上的功能
     */
    public function addedOperationB() {
        echo 'Add Operation B <br />';
    }
}
 
/**
 * 具体构件
 */
class ConcreteComponent implements Component{
 
    public function operation() {
        echo 'Concrete Component operation <br />';
    }
 
}
 
/**
 * 客户端
 */
class Client {
 
     /**
     * Main program.
     */
    public static function main() {
        $component = new ConcreteComponent();
        $decoratorA = new ConcreteDecoratorA($component);
        $decoratorB = new ConcreteDecoratorB($decoratorA);
 
        $decoratorA->operation();
        $decoratorB->operation();
    }
 
}
 
Client::main();


装饰者模式Android实例

  • 2016年07月30日 09:58
  • 6.77MB
  • 下载

装饰者模式

  • 2014年06月09日 13:01
  • 5KB
  • 下载

手动编写JDBC连接池应用适配器和装饰者模式

背景:      为了对DBUtil更好的理解,所以决定自己手动编写一个连接池,众所周知,DBUtil是一个操作数据库的工具类,是对jdbc的简单封装,不会损耗数据库的性能,所以有的公司为了追求性能...

装饰者模式 - PHP版

  • 2014年05月21日 09:45
  • 2KB
  • 下载

具有装饰者的模式照片

  • 2009年06月14日 00:46
  • 1.78MB
  • 下载

装饰者设计模式,简单代码实现

/**装饰者模式 * 装饰者模式就是使用被装饰类的一个子类的实例,在客户端将 * 这个子类的实例交给装饰类。是集成的替代方案 * 优点:使用装饰模式,可以提供比继承更灵活的扩展对象的功能...

装饰者模式案例学习代码

  • 2013年03月03日 01:07
  • 2KB
  • 下载

装饰者模式源代码java

  • 2014年01月18日 21:59
  • 3KB
  • 下载

简单实例理解装饰者设计模式

1.装饰设计模式: 将一个对象作为参数进行传递,然后对这个对象进行包装---改变其中的方法或者添加一些新的行为---装饰设计模式---装饰者模式---Decorate Model 改变一个...

设计模式-装饰者

  • 2015年11月07日 10:44
  • 4.44MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:装饰者模式
举报原因:
原因补充:

(最多只允许输入30个字)