Java设计模式——结构型模式之代理模式

一、前言

     我们在生活中经常会听到什么代理商,或者中间商之类的名词,他们的存在隐藏了真实厂商的存在,在我们java中,代理模式的设计就是为其他对象提供一种代理以控制对这个对象的访问。简单来说就是在真正实现类上再套一个代理类,用户调用的是代理类的方法或者接口,但真正实现的是这个被包装的类的方法。代理模式与装饰模式有点相似,但它们却有很大区别,装饰模式是增加或者减少额外的职责,而代理模式不添加任何职责,只是调用被包装类的方法。由此可见,代理类做到了对包装类的一种隐藏和保护。

二、代理模式

 原理:为其他对象提供一种代理以控制对这个对象的访问。

使用场景:

 1、远程代理(RemoteProxy)为一个对象在不同的地址空间提供局部代表。

2、虚代理(VirtualProxy)根据需要创建开销很大的对象。

3、保护代理(ProtectionProxy)控制对原始对象的访问。

4、智能指引(SmartReference)取代了简单的指针,它在访问对象时执行一些附加操作。

      代理模式其实就是为控制对象提供一个替身,用来控制这个对象的访问,被代理的对象往往是比较复杂或者调用比较困难的,它可以是远程对象,创建开销很大的对象,或需要安全控制的对象。代理模式的实现方式有很多种,但都是为了控制与管理访问对象。

三、代码展示

      代理模式的角色一般都是代理类、被代理类,在调用代理类的方法时,其实是在代理类中调用被代理类的方法。这样就可以做到控制和管理访问对象。 

3.1  接口

public interface Phone {
public void sale();
}

3.2  被代理类
 

public class RealPhone implements Phone{

	@Override
	public void sale() {
		// TODO Auto-generated method stub
		System.out.println("真正手机生产商");
	}

}
3.3 代理类

public class PhoneProxy implements Phone{
	private RealPhone realPhone;
    public PhoneProxy() {
		// TODO Auto-generated constructor stub
		realPhone = new RealPhone();
	}

	@Override
	public void sale() {
		// TODO Auto-generated method stub
		System.out.println("代理开始");
		realPhone.sale();
		System.out.println("代理结束");
	}

}
3.4 结果
public class Test {
public static void main(String[] args) {
	PhoneProxy phone = new PhoneProxy();
	phone.sale();
}
}
代理开始
真正手机生产商
代理结束
 
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值