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() 。
模式啊!
是学习模式以来遇到的第一个难题,到敲这些字的这一刻,我也只是对它有一个轮廓,具体的还是有一些模糊 :-(
我看的书是《设计模式精解》和《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() 。
模式啊!