设计模式——代理模式(Proxy)

设计模式

一、代理模式概述

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


二、代码实例

接口的应用:代理模式
【类似:想要租房子 & 中介;明星 & 经纪人】

1. 为什么非要代理类来做?

因为代理类中不光做这个事,还做了些别的事,而被代理类只关注自己核心到底是要干什么就可以了
【如下代码就能看到,真正的明星类只关注自己的核心功能"唱歌"就可以了,其他的都由代理类来完成】

2. 静态代理

  • 这里写的是静态代理(代理类是专门针对某一个接口的);
  • 后期讲到框架会用到代理模式,但是是动态代理(代理类这次是代理租房子,下次是代理买菜…,究竟代理谁,是运行过程中动态分配的),需要用到反射的知识;
//测试
public class StaticProxyTest {
	public static void main(String[] args) {
		RealStar real = new RealStar();
		Proxy p = new Proxy(real);
		p.confer();
		p.signContract();
		p.bookTicket();
		p.sing();
		p.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 RealStar real;
	
	//创建代理类的时候,指明被代理的对象
	public Proxy(RealStar real){
		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("经纪人收钱");
	}
}

三、代理模式的应用场景

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值