模式学习笔记——Decorator/装饰模式

来源:互联网 发布:和合软件科技有限公司 编辑:程序博客网 时间:2024/04/28 12:34
Decorator 装饰模式,呵呵,这个单词还不知道怎么读呢?哈哈,管它呢,知道是装饰模式就可以了。
  是学习模式以来遇到的第一个难题,到敲这些字的这一刻,我也只是对它有一个轮廓,具体的还是有一些模糊 :-(
  我看的书是《设计模式精解》和《JAVA与模式》,混合着看,这本不懂看那本,那本不懂看这本,所谓尺有所短,寸有所长,这个学习方法还是不错滴,后来者应该可以借鉴吧!

  两本书都用了那个打印头注和尾注的那个例子讲解的!现在终于明白了很多师兄跟我说的话了,一定要写代码,不写的话心里是不会对它有一个高层次和低层次结合起来的理解!
  我只是看这两个例子时,都不明白其中的调用是怎么一回事,最后还是敲了代码!
  先敲的是《JAVA与模式》里关于齐天大圣的那个例子的,写到一半的时候心里就明白很多了。在这个例子中:
  public class 七十二般变化{} 中,保留了一个对 齐天大圣 的引用! private 齐天大圣 c;  这是很关键的一个地方!并且这个类中的 move() 方法正是调用 c 的 move() 方法!这个意思就是说,真正的行为还是要 大圣 来实现!==,还有更精彩的地方,在 类 七十二般变化 的子类中,它“重载”了父类的 move() 方法。为什么我在重载那加了个引号呢?看看它的方法体就知道了: public void move(){  super.move();  } ,与其说是重载,倒不如说是直接的“调用”! (差点忘了另一个重要的地方:另外一个继承了 齐天大圣 的结点:大圣本尊 ) 

  模式!是不是就在这地方体现了呢?也就是:在一个 ConcreteDecorator 中,调用其它类(这里是父类的,而在那个打印的例子中则是调用本类的另一个方法),这里,我不知道我有没有理解错了!有吗?没有吗?不知道,说老实话,真是不知道!

  再看一下“打印”的这个例子中的实现!—— 的的是在大圣的例子中的等同类(有错的话请一定帮忙指正)

  public abstract class Order{}  ——  齐天大圣
  public class SalesOrder extends Order{}  —— 大圣本尊
  public abstract class OrderDecorator extends Order{}  —— 七十二般变化
  public class HeaderDecorator extends OrderDecorator{}  —— 鱼
  public class FooterDecorator extends OrderDecorator {}  —— 鱼
  另外还有两个类是辅助类 class OrderLine    and    class Client

  在 Order 中定义的 print() 方法,它的两个子类也是进行了“重载”。
  两个 ConcreteDecorator 中的 print() 方法呢,先调用了父类的 print() 方法,然后又调用了自身的 printHeader() / printFooter() 。

  模式啊!
原创粉丝点击