A:在不影响业务情况下,增强一个方法有几种方法呢?
B:3种!
A:哪三种呀?
一、继承类来重写方法;
1、要可以获取这个类的构造;
class Man{ public void run(){ System.out.println("跑...."); } } class SuperMan extends Man{ public void run(){ super.run(); System.out.println("飞...."); } }
二、装饰者模式
1、包装类要和被包装类实现同一接口;
2、包装类要获取被包装类的引用;
public interface Tenant { void rent(); }
public class People implements Tenant { public void rent() { System.out.println("支付租金"); } }
public class PeopleProxy implements Tenant {//实现统一接口 private People p; public PeopleProxy(People p){//获取被包装类的引用 this.p = p; } public void rent() { System.out.println("我是中介我要先收中介费"); p.rent(); } }
三、动态代理
1、被增强的对象实现接口即可;
public class ActiveProxy implements InvocationHandler { private Object o; public ActiveProxy(Object o){ this.o = o; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object invoke = method.invoke(this.o, args); return invoke; } }
public class Run { public static void main(String[] args) { //获得要增强实现类的对象 Tenant p = new People(); //类加载器 ClassLoader c = p.getClass().getClassLoader(); //产生的代理对象的引用 ActiveProxy handler = new ActiveProxy(p); Tenant app = (Tenant) Proxy.newProxyInstance(c,new Class[]{Tenant.class},handler); app.rent(); } }
Wow, wonderful weblog format! How long have you been blogging for?
you make blogging glance easy. The whole look of your site is excellent, as well
as the content material! You can see similar here najlepszy sklep