我们都知道,得到一匹布需要大概这么几步:
       1、染色
       2、印花
       3、裁剪
  这种形式在面向对象中怎么实现呢?

面向过程【继承模式】实现:

    继承模式得到需要的布料,一步一步的加工。
    继承的层次越来越深,扩展性差。如果中间加道其他程序,就有些吃力了。
<?php
    header("content-type:text/html;charset=utf8");
    class BaseCloth{         //布料初始的样子
        protected $content;
        public function __construct($con){
            $this->content=$con;
        }
        public function cloth(){
            return $this->content;
        }
    }
    class DyeingCloth extends BaseCloth{   //染色
        public function dyeing(){
            return $this->content."  --->染上色";
        }
    }
    class StampCloth extends DyeingCloth{   //印花
        public function stamp(){
            return $this->content."  --->印上好看的花";
        }
    }
    class CutCloth extends StampCloth{      //裁剪
        public function cut(){
            return $this->content."  --->根据需求裁剪";
        }
    }

    //布料加工。
    $cloth= new BaseCloth("白布");
    $dyeing=new DyeingCloth($cloth->cloth());
    $stamp=new StampCloth($dyeing->dyeing());
    $cut=new CutCloth($stamp->stamp());
    echo $cut->cut();
?>

装饰器模式实现布匹加工。

<?php
    header("content-type:text/html;charset=utf8");
    /**
     * 装饰器模式完成布料的加工。动态、扩展性好。
     */
    class BaseCloth{         //布料的初始样子
        protected $content;
        public function __construct($con){
            $this->content=$con;
        }
        public function cloth(){
            return $this->content;
        }
    }
    class DyeingCloth extends BaseCloth{   //染色
        public function __construct(BaseCloth $cloth){
            $this->cloth=$cloth;
            $this->cloth();
        }
        public function cloth(){
            return $this->cloth->cloth()."  --->染上色";
        }
    }
    class StampCloth extends BaseCloth{   //印花
        public function __construct(BaseCloth $cloth){
            $this->cloth=$cloth;
            $this->cloth();
        }
        public function cloth(){
            return $this->cloth->cloth()."  --->印上花";
        }
    }
    class CutCloth extends BaseCloth{      //裁剪
        public function __construct(BaseCloth $cloth){
            $this->cloth=$cloth;
            $this->cloth();
        }
        public function cloth(){
            return $this->cloth->cloth()."  --->根据需求裁剪";
        }
    }

    //布料加工。
    $con=new CutCloth(new DyeingCloth(new BaseCloth("白布")));
    echo $con->cloth();
?>

php八大设计模式之装饰器模式的更多相关文章

  1. python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

  2. PHP设计模式之装饰器模式(Decorator)

    PHP设计模式之装饰器模式(Decorator) 装饰器模式 装饰器模式允许我们给一个类添加新的功能,而不改变其原有的结构.这种类型的类属于结构类,它是作为现有的类的一个包装 装饰器模式的应用场景 当 ...

  3. python设计模式之装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

  4. PHP设计模式之装饰器模式

    装饰器模式:如果已有对象的部分内容或功能性发生改变,但是不需要修改原始对象的结构或不使用继承,动态的扩展一个对象的功能,则应该使用装饰器模式.简单点说:就是我们不应该去修改已有的类,而是通过创建另外一 ...

  5. java设计模式之 装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装 ...

  6. php设计模式八-----装饰器模式

    1.介绍: 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

  7. Java设计模式系列-装饰器模式

    原创文章,转载请标注出处:<Java设计模式系列-装饰器模式> 一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是 ...

  8. c#设计模式之装饰器模式(Decorator Pattern)

    引子 在面向对象语言中,我们常常会听到这样一句话:组合优于继承.那么该如何去理解这句话呢? 下面我将以游戏装备为模型用简单的代码去展示它 先创建一个装备的抽象类,然后创建刀枪2个具体的业务子类 pub ...

  9. 设计模式之装饰器模式(PHP实现)

    /** * 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. * 这种模式创建了一个 ...

随机推荐

  1. POJ 3368 线段树

    思路: 先统计在第i个位置当前数字已经出现的次数. 维护两个数组,一个是当前位置的数字最后一次出现的位置,另一个是当前位置的数字第一次出现的位置 查找的时候分为两种情况: 没有和边界相交(意会意会)的 ...

  2. hiho 1571 - 贪心好题*

    题目链接 小Hi在帮助钢铁侠开发新的盔甲.这套新盔甲一共包含M种武器插槽,其中第i种插槽有Ci个.每个插槽最多安装一个武器模块. 小Hi一共准备了N个武器模块,编号1~N.每个武器模块都有三个参数Vi ...

  3. hiho169周 - 表达式求值

    题目链接 计算表达式100*(2+12)-(20/3)*2 ---------------------------------------------------------------------- ...

  4. 重设数据文件大小sql语句

    set verify off column file_name format a50 word_wrapped column smallest format 999,990 heading " ...

  5. 优动漫PAINT-简单的树、叶教学

    如题,简单.好用:其实说的还是一个观察的事.看你是否足够细心,对于树叶的生长.枝桠和树干的关系是否了解咯. 对于这样的树枝丫和叶子完全可以使用优动漫PAINT完成,简单又快捷,软件下载:www.don ...

  6. 3ds Max实例教程-顽皮的小孩

    本教程介绍使用3ds Max制作设计一个顽皮的小孩,这个作品的灵感来源于作者的亲身经历,也是以真实人物为原型做出来这么一个小人. 作者: Claudius Vesting 使用软件:3ds Max,P ...

  7. FCC编程题之中级算法篇(下)

    介绍 本篇是"FCC编程题之中级算法篇"系列的最后一篇 这期完结后,下期开始写高级算法,每篇一题 目录 1. Smallest Common Multiple 2. Finders ...

  8. 浏览器 滚动条 占据 y轴宽度的解决方案

    html { overflow-y: scroll; } :root { overflow-y: auto; overflow-x: hidden; } :root body { position: ...

  9. svn 验证位置失败 Authorization failed

    进入svn的conf目录下 修改svnserve.conf [general] anon-access = none  #未登录用户不允许访问 auth-access = write  passwor ...

  10. yii框架原生代码

    http://www.cnblogs.com/duanxz/p/3480254.htm