- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java装饰器模式-解析
装饰器目的:依然是面向对象的精髓思想,少用继承实现,多用组合。
融合到现实生活中,我们的电脑主板上有许多可以扩展的插槽,但是出厂的时候并没有全部插上器件,就是让我们能够灵活的有选择性的选择自己需要的硬件来组装。装饰器模式正是基于此:一个一个的装饰器,为我们灵活带来了扩展。
装饰器模式和代理模式有点想象,都是AOP思想。但是我觉得用一句通俗的话来解释:代理模式是定死需要被代理的类,通过反射在每个被代理的类的方法上面做文章,而装饰器模式是定死一个个的方法,来处理不同的对象。
所以总结:装饰器是基于对象,而代理模式是基于方法而言的。
都利用的是AOP思想。
开始:--
接口:车Car。里面只有方法:开车drive();
package decorator;
/**
* 接口:车。只有一个方法,就是开车
*
* @author Administrator
*
*/
public interface Car {
void drive();
}
奥迪,宝马,奔驰。都实现了Car这个接口,当然需要Override开车这个方法。
package decorator;
/**
* 奥迪车类
*
* @author Administrator
*
*/
public class AudiCar implements Car {
@Override
public void drive() {
System.out.println(奥迪开走了);
}
}
package decorator;
/**
* 宝马车类
*
* @author Administrator
*
*/
public class BMWCar implements Car {
@Override
public void drive() {
System.out.println(宝马车开走了);
}
}
package decorator;
/**
* 奔驰车类
*
* @author Administrator
*
*/
public class BZCar implements Car {
@Override
public void drive() {
System.out.println(奔驰车开走了);
}
}
装饰器1:加油、洗车
package decorator;
/**
* 第一个装饰器:开车前加油,开车后洗车
*
* @author Administrator
*
*/
public class Decorator1 implements Car {
private Car car;
public Decorator1(Car car) {
this.car = car;
}
@Override
public void drive() {
System.out.println(加油);
car.drive();
System.out.println(洗车);
}
}
装饰器2:检查车辆、保养车子
package decorator;
/**
* 装饰器2:开车前检查车辆,开车后保养车子
*
* @author Administrator
*
*/
public class Decorator2 implements Car {
private Car car;
public Decorator2(Car car) {
this.car = car;
}
@Override
public void drive() {
System.out.println(检查车辆);
car.drive();
System.out.println(保养);
}
}
测试:
package decorator;
public class TestDecorator {
public static void main(String[] args) {
// 针对三个牌子的车只用某一个装饰器
Car car1 = new Decorator1(new AudiCar());// 奥迪车的装饰器1
car1.drive();
Car car2 = new Decorator1(new BMWCar());// 宝马车的装饰器1
car2.drive();
Car car3 = new Decorator2(new AudiCar());// 奥迪车的装饰器2
car3.drive();
Car car4 = new Decorator2(new BMWCar());// 宝马车的装饰器2
文档评论(0)