Java 基础(接口的应用:代理模式 Proxy)

  • 概述:
    代理模式是Java开发中使用较多的一种设计模式。代理设计就是为其他对象提供一种代理以控制对这个对象的访问。

  • 应用场景:

安全代理: 屏蔽对真实角色的直接访问。I
远程代理: 通过代理类处理远程方法调用(RMI)
延迟加载: 先加载轻量级的代理对象,真正需要再加载真实对象。比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有100MB,在打开文件时,不可能将所有的图片都显示出来,这样就可以使用代理模式,当需要查看图片时,用proxy来进行大图片的打开。

  • 分类:

静态代理(静态定义代理类)
动态代理 (动态生成代理类)
JDK自带的动态代理,需要反射等知识

NetWorkTest.java

package com.klvchen.java1;

public class NetWorkTest {
	public static void main(String[] args) {
		Server server = new Server();
		ProxyServer proxyServer = new ProxyServer(server);
		
		proxyServer.browse();
	}

}

interface NetWork{
	
	public void browse();
	
}

//被代理类
class Server implements NetWork{

	@Override
	public void browse() {
		System.out.println("真实的服务器访问网络");
	}
	
}

//代理类
class ProxyServer implements NetWork{
	
	private NetWork work;
	
	public ProxyServer(NetWork work) {
		this.work = work;
	}
	
	public void check() {
		System.out.println("联网之前的检查工作");
	}

	@Override
	public void browse() {
		check();
		
		work.browse();
		
	}
}

静态代理

StaticProxyTest.java

package com.klvchen.java1;

public class StaticProxyTest {
	
	public static void main(String[] args) {
		Star s = new Proxy(new RealStar());
		s.confer();
		s.signContract();
		s.bookTicket();
		s.sing();
		s.collectMoney();
	}

}

interface Star{
	void confer(); // 面议
	
	void signContract(); // 签合同
	
	void bookTicket(); // 订票
	
	void sing(); // 唱歌
	
	void collectMoney(); // 收钱
}

class RealStar implements Star {

	@Override
	public void confer() {		
	}

	@Override
	public void signContract() {

	}

	@Override
	public void bookTicket() {

	}

	@Override
	public void sing() {
		System.out.println("明星, 唱歌~~~~");
	}

	@Override
	public void collectMoney() {

	}
	
}

//代理类
class Proxy implements Star{
	private Star real;
	
	public Proxy(Star real) {
		super();
		this.real = real;
	}

	@Override
	public void confer() {
		System.out.println("经纪人面谈");
	}

	@Override
	public void signContract() {
		System.out.println("经纪人签合同");		
	}

	@Override
	public void bookTicket() {
		System.out.println("经纪人订票");		
	}

	@Override
	public void sing() {
		real.sing();
	}

	@Override
	public void collectMoney() {
		System.out.println("经纪人收钱");		
	}
	
}

posted @ 2021-03-15 15:09  klvchen  阅读(123)  评论(0编辑  收藏  举报