如何扩展某一个方法?
原有的方法逻辑,不是我们想要的。 想修改自己的逻辑
- 直接改源码 , 无法实现。
- 继承, 必须得知道这个接口的具体实现是谁。
- 使用装饰者模式。
- 动态代理
装饰者模式
- 场景:二次开发的时候,无法获取到源码,无法使用继承前提下,要对已经存在对象上的功能进行增强.
- 前提: 可以获取到被装饰的对象Waitress实现的所有接口
- 实现思路: 自定定义装饰类,实现Waiter接口,同时为自定义装饰类传递被装饰的对象
弊端:如果被实现的接口中的方法过多,装饰类中的方法过多冗余==>动态代理解决
例子:
Waiter接口,
public interface Waiter {
void service();
}
Waitress类, 实现Waiter接口,
public final class Waitress implements Waiter {
@Override
public void service() {
System.out.println("在服务...");
}
}
WaitressWrap类(<==装饰设计模式,用来包装Waitress类)
public class WaitressWrap implements Waiter {
Waiter waiter = null;
//构造
public WaitressWrap(Waiter waiter){
this.waiter = waiter;
}
@Override
public void service() {
System.out.println("微笑:::");
watier.service();
}
}
测试:
public class MainTest {
public static void main(String[] args) {
WaitressWrap waitressWrap = new WaitressWrap(new Waitress());
waitressWrap.service();
}
}