代理模式

2018-11-30  本文已影响0人  幸运星32
1:静态代理
interface Subject//抽象角色
{  
    public void doSomething();  
}
class RealSubject implements Subject//真实角色
{  
    public void doSomething()  
  {  
    System.out.println( "call doSomething()" );  
  }  
}
class SubjectProxy implements Subject//代理角色
{
  //代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
  Subject subimpl = new RealSubject();
  public void doSomething()
  {
     System.out.println("before"); //调用目标对象之前可以做相关操作
     subimpl.doSomething();
     System.out.println("after");//调用目标对象之后可以做相关操作
  }
}
 
public class Test
{
    public static void main(String[] args) throws Exception
    {
        Subject sub = new SubjectProxy();
        sub.doSomething();
    }
}
2:动态代理

通过创建代理类并实现InvocationHandler
直接上代码

public interface IShop {
     void buy();
}

public class Bestar implements IShop {
    @Override
    public void buy() {
        System.out.println("购买腐乳");
    }
}

public class DynamicPurchasing implements InvocationHandler {
    private Object object;
    public Object bind(Object obj){
        this.object = obj;
        return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object result = method.invoke(object,args);
        if (method.getName().equals("buy")){
            System.out.println("买买买");
        }
        return result;
    }
}

//使用时
public void testDynamicPurchasing(){
        IShop iShop = (IShop) new DynamicPurchasing().bind(new Bestar());
        iShop.buy();
    }
上一篇 下一篇

猜你喜欢

热点阅读