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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© moonlight 黑马帝   /  2011-11-18 16:47  /  2327 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 moonlight 于 2011-11-20 17:20 编辑

谁能用通俗的语言解释一下什么叫装饰设计模式啊,最好举一个例子,谢谢了

5 个回复

正序浏览
谢谢各位!
回复 使用道具 举报
徐杨 黑马帝 2011-11-18 19:32:17
报纸
装饰设计模式简单的来说
就是动态的为对象添加一些功能
当对类的功能进行增强时,可称之为对该类的装饰。
同时它的出现具备灵活性。

装饰和继承。
装饰设计模式是一种解决某一类问题的思想。该类问题的有效解决方案。
        解决给类提供增强型功能的问题。
继承:是面向对象的特征之一。
回复 使用道具 举报
装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

装饰模式的特点;
(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象包含一个真实对象的索引(reference)
(3) 装饰对象接受所有的来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。
总的来说就是一层一层的包装,同时加上了新的东西。

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
在 IO 包中用到了大量的装饰器模式,所以我们就可以这样用:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...)));

也就是一层一层地添加些功能,节省点类。

我们就不用写 BufferedInputStreamReader 这种类了。如果这样做的话,每种样子都来一个,
类会多得吃不消的

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 潜王伟 于 2011-11-18 16:55 编辑

装饰设计模式就是把一个类进行包装,使这个类具有更大的功能。
装饰设计模式的特点:
          1,含有一个包装类的引用。
          2,通过构造函数进行装配。
          3,含有和被包装类同样的方法,方法中调用被包装类的方法(以此对其进行增强);
          4,可以实现或继承被包装类的接口或父类,可以当作被包装的类使用。

以下是一个装饰设计模式的例子:
class Person{
      public void eat(){
             System.out.println("吃饭");
      }
}

class SuperPerson{
          private  Person   p;
          SuperPerson(Person p){
                    this.p = p;
          }
          public void superEat(){
                System.out.println("开胃菜");
                p.eat();
                System.out.println("KFO");
                System.out.println("抽烟");      
           }
}

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

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