A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李蛟龙 中级黑马   /  2012-4-13 16:45  /  1259 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李蛟龙 于 2012-4-13 16:49 编辑

小弟现在有关于各个模式之间的问题,总感觉很多模式之间 走的是擦边的路线
希望哪个大虾给指引下
包装模式与策略模式的异同

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

1 个回复

倒序浏览
装饰设计模式:它的出现基于流,并提升了流的功能
包装设计模式又称装饰模式,是指用一个类包装另一个类,增强功能
所谓包装,自定义一个包装类,针对某个被包装的对象进行功能的增强

关键点:
保证包装后对象的性质不发生改变,所以包装类需要和被包装对象实现同样的接口
包装类通常需要持有被包装对象(因为包装设计模式不能功能的重构,只是某个功能增强)
由于实现了同样的接口,包装类必须实现接口中所有的方法,对于大部分不想增强的方法,在实现接口时,我们利用被包装对象类实现
例如
  1. public void run() {
  2.        this.被包装对象.run();
  3. }
  4. 对于需要包装的方法,我们在被包装对象实现的基础之上增加功能
  5. public void go() {
  6.     // ...... 增加功能
  7.     this.被包装对象.go();
  8.     // ...... 增强功能
  9. }
复制代码
设计模式之策略模式
  在程序的功能实现过程中,我们只规定算法名称,具体的算法留给将来的程序实现
在一个程序中提供的功能得以实现需要借助调用者的帮忙,并且是强制性的,此时可以在方法的参数中定义接口,让调用者来实现
例如:
  1. // 数字打印机
  2. public class NumberPrinter {
  3. // 持有数字
  4. private int[] arr;
  5. public NumberPrinter(int[] arr) {
  6. this.arr = arr;
  7. }

  8. public void print(NumberFilter filter) {
  9. for(int i=0; i<arr.length; i++) {
  10. int num = arr[i];
  11. if(filter.accept(num)) {
  12. System.out.print(num + ",");
  13. }
  14. }
  15. }
  16. }

  17. public interface NumberFilter {
  18. boolean accept(int num);
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马