黑马程序员技术交流社区
标题:
装饰者设计模式
[打印本页]
作者:
zhouyan19901008
时间:
2018-12-27 17:08
标题:
装饰者设计模式
本帖最后由 zhouyan19901008 于 2018-12-27 17:10 编辑
装饰者设计模式
1. 需求分析
在实际开发中,有些类的方法并不能满足我们的需求,而且我们还不能修改其源代码。那么我们就想办法对类的方法进行增强。因此今天我们来阐述一下关于方法增强的方式. 此处主要讲解"装饰者设计模式"去实现方法增强
2. 实现方案
1. 继承: 子类继承父类,重写父类方法
缺点:
1. 子类必须获取父类的构造函数.
2. extends 位置很宝贵的
2. 装饰者设计模式
缺点: 需要额外创建一个类,才能实现对类的方法进行增强.
3. 动态代理
优点: 不需要额外的类, 动态的对类的方法进行增强.
3. 装饰者设计模式
实现步骤
1. 装饰者和被装饰者要实现相同的接口,或者继承同一个父类.
2. 装饰者必须有被装饰者的引用.
3. 对需要增强的方法进行增强
4. 对不需要增强的方法,调用原来的方法即可.
代码演示
1. 编写Car接口
package
com.itheima.stat;
/**
*
*
汽车接口
*/
public interface
Car {
public void
run();
public void
stop();
}
2. 编写被装饰对象 QQCar .
package
com.itheima.stat;
public class
QQCar
implements
Car {
@Override
public void
run() {
System.
out
.println(
"QQ
车慢悠悠的启动了
~~~"
);
}
@Override
public void
stop() {
System.out.println(
"QQ
车刹车了
~~~"
);
}
}
3. 编写装饰者FourS.
package
com.itheima.stat;
/**
*
装饰者类
:
*/
public class
FourS
implements
Car {
private final
Car
car
;
public
FourS(Car car){
this
.
car
= car;
}
//
对需要增强的方法进行增强
public void
run() {
System.out.println(
"
弹射起步
~~~"
);
}
//
对不需要增强的方法
,
调用原来的方法即可
.
public void
stop() {
car.stop();
}
}
4. 编写测试类.
package
com.itheima.stat;
public class
Demo {
public static void
main(String[] args) {
Car car =
new
QQCar();
//
增强
run
方法以后的汽车了
car =
new
FourS(car);
car.run();
car.stop();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2