Java设计模式之代理模式
下文笔者将讲述Java设计模式之代理模式,如下所示
代理模式简介
我们将采用间接的方式调用对象的模式称之为“代理模式”
代理模式的分类
代理模式分为:
静态代理类
动态代理类
静态代理
package com.java265.other;
public class Test16 {
/**
* java265.com 示例程序
*/
public static void main(String... args) {
ChaZuo chaZuo = new ProxyChaZuo(new MeiGuiChaZuo());
chaZuo.chaDian();
}
}
interface ChaZuo {
void chaDian();
}
class MeiGuiChaZuo implements ChaZuo {
@Override
public void chaDian() {
System.out.println("我是一个美规插座");
}
}
class ZhongGuiChaZuo implements ChaZuo {
@Override
public void chaDian() {
System.out.println("我是一个中国插座");
}
}
/* 定义一个代理类 */
class ProxyChaZuo implements ChaZuo {
private ChaZuo chaZuo;
public ProxyChaZuo(ChaZuo chaZuo) {
this.chaZuo = chaZuo;
}
@Override
public void chaDian() {
chaZuo.chaDian();
}
}
-----运行以上代码,将输出以下信息------
我是一个美规插座
动态代理
只需实现一个InvocationHandler接口 并重写invoke方法即可例:
package com.java265.other;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Test16 {
/**
* java265.com 示例程序
*/
public static void main(String... args) {
MeiGuiChaZuo meiGuiChaZuo = new MeiGuiChaZuo();
DynamicProxy dpy = new DynamicProxy();
ChaZuo chaZuo = (ChaZuo) dpy.proxyObj(meiGuiChaZuo);
chaZuo.chaDian();
}
}
/*
* 定义一个动态代理类
*/
class DynamicProxy implements InvocationHandler {
Object obj;
public Object proxyObj(Object obj) {
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object res = method.invoke(obj, args);
return res;
}
}
interface ChaZuo {
void chaDian();
}
class MeiGuiChaZuo implements ChaZuo {
@Override
public void chaDian() {
System.out.println("我是一个美规插座");
}
}
class ZhongGuiChaZuo implements ChaZuo {
@Override
public void chaDian() {
System.out.println("我是一个中国插座");
}
}
/* 定义一个代理类 */
class ProxyChaZuo implements ChaZuo {
private ChaZuo chaZuo;
public ProxyChaZuo(ChaZuo chaZuo) {
this.chaZuo = chaZuo;
}
@Override
public void chaDian() {
chaZuo.chaDian();
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


