黑马程序员技术交流社区

标题: 继承和装饰 [打印本页]

作者: 吴涛    时间: 2014-3-6 21:18
标题: 继承和装饰
装饰设计模式:
当想要对已有对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供增强功能。
这个自定义的类成为装饰类。

装饰类通常通过构造函数接收被装饰对象,并基于被装饰的对象的功能,提供更强的功能,

对于装饰设计模式和继承,我感觉差不多,
毕老师在视频里说了,我还是不清楚,为什么?

有没有想通的,给我说说?


作者: 平凡成就非凡    时间: 2014-3-6 21:49
装饰模式比继承要灵活啊,不需要复写父类的方法。同时避免啦继承体系的臃肿,而且降低了类与类之间的关系。
作者: centian2005    时间: 2014-3-6 21:59
比如你很早之前有个工厂(父类),生产橘子汁,N年后,你的厂又打算生产西瓜汁,苹果汁等其他100种果汁,一个厂的产能明显不够了。这个时候,你是打算再开100个分厂(相当于子类),还是把以前的机器,换成进口牛逼的,能同时生产100种果汁的机器(在原有方法的基础上,修改代码,增加功能,都是生产果汁,只是材料不同而已)
其实这样一想,装饰设计比继承显得更灵活。同时管理100个类,那个是无法想象的事情{:3_50:}
作者: My_work    时间: 2014-3-7 00:12
装饰是构造函数参数传递进行增强, Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
如果为了某个功能而产生子类(继承)那么那个体系是非常臃肿的.

例如:你有个对象有个功能 是在N年前建立的,如今你觉得功能不够用了 写个类把对象传进来就可以解决问题了 如果这个功能写错了 我就把自己写的功能去掉又不影响以前的功能灵活性相当强的。

装饰模式比继承要灵活。避免了继承体系臃肿。而且降低了类于类之间的关系。
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。如一个简单的demo 人吃饭,刚开始人穷只是普通的吃饭后来人生活好了吃饭就不一样了增强了吃饭的功能  虽然例子不是恰当 能说明问题就行
  1. //穷的时候吃饭简简单单的吃饭
  2. class Person
  3. {
  4.         public void chiFan(){
  5.        
  6.                 System.out.println("吃饭");
  7.         }
  8. }

  9. //富裕后吃饭 吃饭前来杯酒吃饭后来根烟 但是这中间的过程还是有吃饭
  10. class SuperPerson
  11. {
  12.         private Person p;
  13.         public SuperPerson(Person p){
  14.        
  15.                 this.p=p;
  16.         }

  17.         public void superChiFan(){
  18.                 //吃饭前来杯开胃酒增加食量
  19.                 System.out.println("开胃酒");
  20.                 p.chiFan();
  21.                 //吃完饭后来根烟
  22.                 System.out.println("来根烟");
  23.         }

  24. }
  25. public class PersonDemo
  26. {        public static void main(String args[]){
  27.         Person p=new Person();

  28.         SuperPerson sp= new SuperPerson(p);

  29.         sp.superChiFan();
  30.         }
  31. }
复制代码




作者: 午夜b'Boy    时间: 2014-3-7 00:42
个人理解为,继承实现为向上兼容 ,及为父类增强!装饰为向下兼容,只要符合某接口就接收进来!并提供增强功能
作者: osully    时间: 2014-3-7 10:19
我的理解是
装饰类继承父类  增强父类功能 父类所有子类都可以使用增强功能
装饰类继承子类  其他子类无法享用




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