静态代理模式
Posted 七月蜀葵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态代理模式相关的知识,希望对你有一定的参考价值。
静态代理模式,为其他对象提供一种代理来控制对这个对象的访问。
代理,顾名思义,就好比如明星的经纪人可以代理他处理一些业务上的事情,再比如你领取快递,几乎都是通过一些代理点领取,应该没人到总部领取吧。
UML:
共用的接口(Subject):RealSubject和Proxy的共用接口
RealSubject: 定义了Proxy所代表的真实实体
Proxy类:保存一个RealSubject引用使得代理可以访问实体,并提供一个与RealSubject的接口相同的接口,来代理实体
例子:王五(RealSubject)让保姆(Proxy)代理自己赵六超市(Supermarket)去买个西瓜(IBuyWatermelon)
Supermarket
package com.magggie.proxy; public class Supermarket { private String name; public String getName() { return name; } public void setName(String name) { this .name = name; } public Supermarket(String name) { super (); this .name = name; } public Supermarket() { super (); } }
IBuyWatermelon():共用的接口
package com.magggie.proxy; public interface IBuyWatermelon { // 代理事件 public abstract void buyWatermelon(); }
RealSubjec():被代理者
package com.magggie.proxy; public class RealSubject implements IBuyWatermelon{ private Supermarket supermaket; public RealSubject(Supermarket supermaket) { super (); this .supermaket = supermaket; } public RealSubject() { super (); // TODO Auto-generated constructor stub } @Override public void buyWatermelon() { System.out.println( "在"+supermaket.getName()+"买西瓜" ); } }
Proxy:代理者
package com.magggie.proxy; public class Proxy implements IBuyWatermelon{ RealSubject wangWu; // 持有RealSubject的引用 // 在构造函数时new出RealSubject public Proxy(Supermarket supermarket) { wangWu = new RealSubject(supermarket); } @Override public void buyWatermelon() { // 在方法里调用realsubject的方法 wangWu.buyWatermelon(); } }
Client调用
package com.magggie.proxy; public class Client { public static void main(String[] args) { Supermarket zhaoLiu = new Supermarket(); zhaoLiu.setName( "赵六超市" ); Proxy hourseKeeper = new Proxy(zhaoLiu); // 从代理模式可以看出,在客户端只调用Proxy,并没有出现RealSubject hourseKeeper.buyWatermelon(); } }
输出
在赵六超市买西瓜
代理模式使得隐藏了RealSubject,有起到安全的作用,实际上有安全代理,用来控制真实对象访问时的权限,还有远程代理,虚拟代理,智能指引等。
但是当静态代理模式需要代理的方法越来越多时,代码量就越来越多,而且是很傻瓜式地调用RealSubject的方法。。
因此动态代理模式出现了。。。。
以上是关于静态代理模式的主要内容,如果未能解决你的问题,请参考以下文章