黑马程序员技术交流社区

标题: 装饰设计模式 [打印本页]

作者: moonlight    时间: 2011-11-18 16:47
标题: 装饰设计模式
本帖最后由 moonlight 于 2011-11-20 17:20 编辑

谁能用通俗的语言解释一下什么叫装饰设计模式啊,最好举一个例子,谢谢了
作者: 小王同志    时间: 2011-11-18 16:53
本帖最后由 潜王伟 于 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("抽烟");      
           }
}
作者: laoyang    时间: 2011-11-18 17:04
在 IO 包中用到了大量的装饰器模式,所以我们就可以这样用:

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

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

我们就不用写 BufferedInputStreamReader 这种类了。如果这样做的话,每种样子都来一个,
类会多得吃不消的
作者: 赵磊5    时间: 2011-11-18 17:12
装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

装饰模式的特点;
(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象包含一个真实对象的索引(reference)
(3) 装饰对象接受所有的来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。
总的来说就是一层一层的包装,同时加上了新的东西。
作者: 徐杨    时间: 2011-11-18 19:32
装饰设计模式简单的来说
就是动态的为对象添加一些功能
当对类的功能进行增强时,可称之为对该类的装饰。
同时它的出现具备灵活性。

装饰和继承。
装饰设计模式是一种解决某一类问题的思想。该类问题的有效解决方案。
        解决给类提供增强型功能的问题。
继承:是面向对象的特征之一。
作者: moonlight    时间: 2011-11-18 19:48
谢谢各位!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2