黑马程序员技术交流社区

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

作者: 李浩栋    时间: 2014-4-10 21:41
标题: 装饰模式和继承
装饰模式和继承的具体到开发中该怎么用
作者: 嫉妒的耗子    时间: 2014-4-10 22:15
具体怎么用是看你的需求
例如 你用List这个类的时候 你发现你现在要做的操作没有相对应的实现方法 而你又想要有这个实现方法:
你就可以考虑去用装饰设计模式,装饰设计模式的目的就是丰富类的方法
你要知道怎么用的话 就是他的实现步骤 亲 百度吧  很快你就明白了 就只有几步而已
作者: jingdou56    时间: 2014-4-10 22:24
装饰:
如果只是为了将某个类中的功能进行加强,而没有特有的方法,

可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。

装饰类通常会通过构造方法接收被装饰的对象。

继承;
新的类中出了包含原来类中的成员之外,还有自己特有的属性或方法,考虑使用这种模式

装饰模式比继承要灵活。避免了继承体系臃肿。

而且降低了类于类之间的关系。

装饰类和被装饰类通常是都属于一个体系中的。
作者: 沫然    时间: 2014-4-10 22:32
装饰设计模式:
当想要对已有的对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。

如一个简单的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. }
复制代码

以上只是简单说明一下,在JAVA IO中用了很多增强 如:FileRead中read()方法 只是一个一个字节去读,为了读得更快在BufferedReader就增强了read()方法而产生了reandLine()一行一行的去读


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

而且降低了类于类之间的关系。装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰类通常是都属于一个体系中的。







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