黑马程序员-装饰类

--------------------- android开发java培训、期待与您交流! ----------------------

黑马程序员-装饰类

装饰类是一种类,可能是以前别人定义的或者是自己定义的,过了一段时间之后发现它的功能不能满足当前的需求了。那么我们就需要对它的功能进行扩展或者说增强。当然我们不能改变源码;那么我们可以再定义一个类,并且将已有对象作为参数传入,基于已有的功能,并提供加强功能。那么后来定义的增强功能的类就称为装饰类。那么装饰类的这种设计思想就称为装饰设计模式。

下面举个例子来具体体现一下装饰设计模式经典案例

class Person{

 public void chifan(){

  System.out.println("吃饭");

 }

}

class SuperPerson{

 private Person p;

 SuperPerson(Person p){

  this.p = p;

 }

 public void superChifan(){

  System.out.println("开胃酒");

  p.chifan();

  System.out.println("甜点");

  System.out.println("抽烟");

 }

}

public class PersonDemo {

 

 public static void main(String[] args){

  Person p = new Person();

  SuperPerson sp = new SuperPerson(p);

  sp.superChifan();

 }

}

首先Person类就是原先定义的类,我们可以这样理解:作为人要是生活在解放前的话,我们只有吃饭这一行为,仅为了填报肚子。因为那时候穷嘛,没办法。不过到了改革开放后,人民生活水平提高了,人们开始享受吃饭这一日常行为。比如说,饭前喝洋酒、饭后吃甜点;那么我们再用描述解放前人们生活水平的那个java类就不合适了,这时候我们就需要再定义一个类来描述改革开放后人们生活水平了。

就是说,同样是吃饭这一行为,但是后来人们吃饭这一行为方式多样化了,那么新定义的类在描述改革开放后的人的时候,就要把这种多样化体现出来。

java中,这种思想就是装饰设计,就是说提供更多更强的功能;那么就具体说说在java中的体现吧;

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

并基于被装饰类的功能,提供更强的功能;

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

而且降低了类与类之间的关系;

装饰类因为增强已有对象,具有的功能和已有的功能是相同的,只不过提供了更强的功能;

所以装饰类和被装饰类通常都属于一个体系中;

最后的总结就是:其实装饰设计就是通过总结继承和多态的优点来体现的。在定义后来的装饰类时,那种方式可以说还是利用了继承的思想,就是用装饰类继承原有的被装饰的类;

在装饰设计的过程中会去实现一些具体功能,这个时候可能会发生多继承的现象,程序就会显得臃肿。

就是为了避免发生这种情况,利用了多态的特性。把具体子类抽取出来共性的内容,

在定义装饰类的时候可以把共性内容定义在里面,共性内容可以接收后来出现的新子类功能;而不必每实现单个功能就继承被装饰的类;而多态的存在不但提高了扩展性,也很大程度上优化了代码。

---------------------- android开发java培训、期待与您交流! ----------------------

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值