design_modelproxy

Posted gg128

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了design_modelproxy相关的知识,希望对你有一定的参考价值。

1.代理模式

给自己一些简单的形象,让代理者包装和处理信息给客户,与适配器模式的区别是,适配器的处理类无效实现真实类的共同接口,而代理模式需要实现共同的接口,实现同样的接口,重写同样的方法,调用一样的方法名。

2.静态代理:自己手写代理模式,作用代理指定接口下的实现,接口已经指定死了

技术分享图片

3.代码实例

public interface Proxy {
	public  abstract  void  getName();
	public  abstract  void getAddress();
	public  abstract  void getTel();
}

public class ProxyReal implements  Proxy {

	@Override
	public void getName() {
		System.out.println("lili");
	}

	@Override
	public void getAddress() {
		System.out.println("beijing");
	}

	@Override
	public void getTel() {
		System.out.println("12345678");
	}

}

public class ProxyHandle  implements  Proxy{
	private  Proxy  proxy;
	@Override
	public void getName() {
		proxy.getName();;
	}

	@Override
	public void getAddress() {
		proxy.getAddress();
	}

	@Override
	public void getTel() {
		proxy.getTel();
	}

	public ProxyHandle(Proxy proxy) {
		super();
		this.proxy = proxy;
	}
}

 4.动态代理模式//较静态代理模式是可以找使用时指定接口以及接口下的实现类

public interface Proxy {
	public  abstract  void  getName();
	public  abstract  void getAddress();
}


public class ProxyReal implements  Proxy {

	@Override
	public void getName() {
		System.out.println("lili");
	}

	@Override
	public void getAddress() {
		System.out.println("beijing");
	}

}

public class ProxyHandle implements InvocationHandler {
	private Proxy proxy1;

	@Override // invoke(Object proxy, Method method, Object[] args) 利用的反射,可以对比一下方法反射
	// 调用proxyreal时实际调用的方法,
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		method.invoke(proxy1, args);
		return proxy;
	}

	public ProxyHandle(Proxy proxy) {
		super();
		this.proxy1 = proxy;
	}
}

public class Client {
	public static void main(String[] args) {
		ProxyHandle proxyHandle = new ProxyHandle(new ProxyReal());
		Class<?> clazz = ProxyReal.class;
		// 需要指定类加载器的原因是防止已被某个加载器加载而不会再次加载(类加载机制,双亲委托机制),通过反射确定proxyreal.class的getInterfaces获取所实现的接口,
		cn.dynamicproxy.test.Proxy proxy = (cn.dynamicproxy.test.Proxy) Proxy.newProxyInstance(clazz.getClassLoader(),
				clazz.getInterfaces(), proxyHandle);
		proxy.getName();
		;
	}
}

 

以上是关于design_modelproxy的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数