Java设计模式之代理模式

java-教程王 Java教程 发布时间:2022-04-21 11:18:31 阅读数:7707 1
下文笔者将讲述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();
	}
}

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202204/2997.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者