装饰模式:在不改变接口的前提下,动态扩展对象的功能
当想要对已有的对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。一般的,装饰者和背装饰者实现相同的接口,实现增加功能而不增加接口。
装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。
代理模式:在不改变接口的前提下,控制对象的访问
装饰者模式强调功能扩展,比如A对象的B方法,运用装饰模式后,在调用B方法前后增加了新的功能,此时B方法效果与原来不同(咖啡店的例子,用户知道得到的是加了牛奶和奶泡的深焙咖啡,这杯深焙咖啡与原有的深焙咖啡不同)
代理模式强调控制访问,在调用B方法前后加入的方法是用来控制怎么访问B方法的原始数据,而对于B实现的功能效果不做修改(咖啡店的例子,用户只知道得到的是一杯深焙咖啡,里面有没有牛奶等调料是不知道的,功能也是卖给用户一杯咖啡,这个功能是没有变化的)
装饰者模式强调功能扩展,比如A对象的B方法,运用装饰模式后,在调用B方法前后增加了新的功能,此时B方法效果与原来不同(咖啡店的例子,用户知道得到的是加了牛奶和奶泡的深焙咖啡,这杯深焙咖啡与原有的深焙咖啡不同)
代理模式强调控制访问,在调用B方法前后加入的方法是用来控制怎么访问B方法的原始数据,而对于B实现的功能效果不做修改(咖啡店的例子,用户只知道得到的是一杯深焙咖啡,里面有没有牛奶等调料是不知道的,功能也是卖给用户一杯咖啡,这个功能是没有变化的)
- 代理就是让别人(实现类)去干,而具体怎么干并不关心,让谁干也不关心。
装饰:包装,包装的是对象的引用或指针;装饰对象和原对象同时对用户可见。
继承:类的依赖性较强,集成体系臃肿。简言之,装饰扩展的是对象,而继承扩展的是类。