大话设计模式第六章---装饰模式PHP实现

 1 <?php
 2 abstract class Component {
 3     abstract public function operation();
 4 }
 5
 6 class Concrete_component extends Component {
 7     public function operation() {
 8         echo "具体对象的操作<br/>";
 9     }
10 }
11
12 abstract class Decorator extends Component {
13     protected $component;
14
15     public function set_component(Component $component) {
16         $this->component = $component;
17     }
18
19     public function operation() {
20         if ($this->component != null) {
21             $this->component->operation();
22         }
23     }
24 }
25
26 class Concrete_decorator_A extends Decorator {
27     private $added_state;    //鏈被鐗规湁鐨勫姛鑳斤紝浠ュ尯鍒玞oncrete_decorator_A
28
29     public function operation() {
30         parent::operation();
31         $added_state = ‘New State‘;
32         echo "具体装饰对象A的操作<br/>";
33     }
34 }
35
36 class Concrete_decorator_B extends Decorator {
37     public function operation() {
38         parent::operation();
39         $this->added_behavior();
40         echo "具体装饰对象B的操作<br/>";
41     }
42
43     private function added_behavior(){
44     }
45 }
46
47
48
49 //涓嬮潰鏄鎴风浠g爜
50 $c  = new Concrete_component();
51 $d1 = new Concrete_decorator_A();
52 $d2 = new Concrete_decorator_B();
53
54 $d1->set_component($c);
55 $d2->set_component($d1);
56 $d2->operation();

装饰模式:

  动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。

  装饰模式是利用set_component来对对象进行包装的。这样,每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链接中。

时间: 2024-10-13 10:52:34

大话设计模式第六章---装饰模式PHP实现的相关文章

&lt;三&gt;读《《大话设计模式》》之装饰模式

学习这个模式比前几个要难点了,搞了半天才弄懂.好吧,也许是我脑子慢 装饰者模式:装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. <<大话设计模式>>一书中以"小菜"去约会需要打扮为例子来展开学习装饰模式的,对于该模式,本人的理解是:就是对一个已有的算法进行二次加工,但又不改变原来的代码,在原有的数据处理中再一次进行处理. 好了不多说,通过代码去理解会更好一点,本人代码中的注解很关键

大话设计模式第三章之单一职责原则

单一职责原则指的是就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能削弱或者抑制这个类完成其它职责的能力(就像一个程序员  叫他去做医学研究,生物研究,可能会抑制他学设计模式的能力).这种耦合会导致脆弱的设计,当变化发生时,设计会遭到异常不到的破坏(你医学研究久了,设计模式少接触,也就生疏了). 在写一个类的时候,要在类的职责分离上多思考(类的职责搞不清楚,就好像你生病了去找修车的,买菜去学校买),这样代码才是真正的可维护,易扩

第六章 装饰模式

装饰模式将类的装饰功能从类中分离出来,只保留了类的核心职责,装饰逻辑(顺序)由调用者选择分配. /** * Created by hero on 16-3-30. */ public abstract class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Person() {

大话设计模式读书笔记5——装饰模式

装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 装饰模式结构图: 装饰模式实现代码: /// <summary> /// 声明一个Component的抽象基类 /// </summary> abstract class Component { public abstract void Operation(); } /// <summary> ///声明一个具体的Component,继承Component

《大话设计模式》 --- 第二章 策略模式

面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类. 策略模式:定义了算法,分别封装,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,他可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合. 策略模式中普通算法的策略类为环境定义了一系列可供重用的算法或行为.继承有助于析出出这些算法中的公共功能.

大话设计模式第七章---代理模式模式PHP实现

<?php abstract class Subject { abstract public function request(); } class Real_subject extends Subject { public function request() { echo "真实请求"; } } class Proxy extends Subject { private $_real_subject = null; public function request() { if

大话设计模式第十三章之建造者模式

package com.build; /** * 建造胖子 * @author 黄二狗 * */ public class PersonFatBuilder { public PersonFatBuilder() { } public void build() { System.out.println("大头"); System.out.println("大腿"); System.out.println("粗腰"); } } package co

大话设计模式第十七章--适配器模式

<?php abstract class Target { abstract public function request(); } class Normal extends Target { public function request() { echo "NORMAL REQUEST"; } } class Adaptee { public function special_request() { echo "SPECIAL REQUEST"; } }

大话设计模式第十三章---建造者模式比较

<?php class Product { private $_parts = array(); public function add(string $part) { $this->_parts[] = $part; } public function show() { echo "\n PRODUCT CREATEING...<br/>"; foreach ($this->_parts as $part) { echo $part; echo &quo