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(); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。