码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之结构型模式—— 2.3 装饰模式

时间:2015-02-17 23:42:30      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:设计模式 装饰模式

<?php

/**
 * 2.3 装饰模式
 * 定义:
 * 		动态的给一个对象添加一些额外的职责
 * 		,就增加功能来说,装饰模式比生成子
 * 		类更灵活。
 * 角色:
 * 		1. 抽象组件角色
 * 			职责:给出一个抽象接口,以规范
 * 				  准备接受附加责任的对象。
 * 		2. 具体组件角色
 * 			职责:定义一个将要接收附加责任
 * 				  的类。
 * 		3. 装饰角色:
 * 			职责:持有一个构件对象的实例,
 * 				  并实现一个与抽象组件接口
 * 				  一致的接口。
 * 		4. 具体装饰角色
 * 			职责:复制给构件对象添加上附加
 * 				  的责任。
 * 优点:
 * 		1. 此模式与继承关系的目的都是要扩展
 * 		   对象的功能,但是此模式可以提供比
 * 		   继承更多的灵活性。
 * 		2. 通过使用不同的具体装饰类以及这些
 * 		   装饰类的排列组合,设计师可以造出
 * 		   很多不同行为的组合。
 * 缺点:
 * 		1. 这种比较继承更加灵活机动的特性,
 * 		   也同时意味着更加多的复杂性。
 * 		2. 装饰模式会导致设计中出现许多小类,
 * 		   如果过度使用,会使程序变的很复杂。
 * 		3. 装饰模式是针对抽象构件类型编程。但
 * 		   是,如果你要针对具体组件编程时,就
 * 		   应该重新思考你的应用架构,以及装饰
 * 		   者是否合适。当然也可以改变构件接口
 * 		   ,增加新的公开的行为,实现"变透明"
 * 		   的装饰者模式。在实际项目中要做出最
 * 		   佳选择。
 * 使用场景:
 * 		1. 在不影响其他对象的情况下,以动态、透
 * 		   明的方式给单个对象添加职责。
 * 		2.处理那些可以撤销的职责。
 * 		3. 当不能采用生成子类的方式进行扩充时。
 * 		   一种情况是,可能有大量独立的扩展,为
 * 		   支持每一种组合将产生大量的子类,使得
 * 		   子类数目成爆炸性增长。另一种情况可能
 * 		   是以为定义被隐藏,或类定义不能生成子
 * 		   类。
 */

header(‘content-type:text/html;charset=utf-8‘);
//具体组件类
class Person {
    public $name;
    public function __construct($name){
        $this->name=$name;
    }
    public function show(){
        echo ‘装扮的‘.$this->name;
    }
}
//装饰器类
class Finery extends Person{
    public $person;
    public function __construct(Person $person){
        $this->person=$person;
    }
    public function show(){
        $this->person->show();
    }
}
//具体装饰器类
class TShirts extends Finery{
    public function show(){
        echo ‘大T恤 ‘;
        parent::show();
    }
}
class BigTrouser extends Finery{
    public function show(){
        echo ‘裤子 ‘;
        parent::show();
    }
}


//客户端
$p1=new Person(‘张三‘);
$ts1=new TShirts($p1);
$bt1=new BigTrouser($p1);
$tsbs1=new TShirts(new BigTrouser($p1));
$ts1->show();
echo ‘<br/>‘;
$bt1->show();
echo ‘<br/>‘;
$tsbs1->show();

?>


本文出自 “一切皆有可能” 博客,请务必保留此出处http://noican.blog.51cto.com/4081966/1614776

设计模式之结构型模式—— 2.3 装饰模式

标签:设计模式 装饰模式

原文地址:http://noican.blog.51cto.com/4081966/1614776

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!