静态代理模式

[b]静态代理模式的角色:[/b]
抽象角色:声明真实角色和代理角色的接口;
真实角色: 最终要引用的对象
代理角色:持有一个真实角色的引用

一个房东(真实角色),一个中介(代理角色),都能实现卖房子这个动作(接口中的抽象方法)。
但只有房东有房子,它一定能卖房子,但中介必须与房东交互才能卖掉房子(必须持有真实角色的引用)。

1.抽象角色:Subject.java

package proxy;

public abstract class Subject
{
public abstract void request();
}


2.真实角色:RealSubject.java

package proxy;

public class RealSubject extends Subject
{
public void request()
{
System.out.println("From real subject.");
}
}


3.代理角色:ProxySubject.java

package proxy;

public class ProxySubject extends Subject
{
//代理角色内部引用了真实角色
private RealSubject realSubject = new RealSubject();

public void request()
{
//在真实角色操作之前所附加的操作
this.preRequest();

//真实角色所完成的事情
realSubject.request();

//在真实角色操作之后所附加的操作
this.postRequest();
}

private void preRequest()
{
System.out.println("pre request");
}

private void postRequest()
{
System.out.println("post request");
}
}


4.客户端:Client.java

package proxy;

public class Client
{
public static void main(String[] args)
{
Subject subject = new ProxySubject();

subject.request();
}
}



静态代理虽然也能实现一个代理真实多个真实角色,但每增加一个真实现角色就必须实现真实角色的接口,并添加对应的方法,角色一多就混乱了。

在实际应用中,通常是一个真实角色对应一个代理角色。此外,如果事先并不知道真实角色,该如何使用代理呢?这个问题可以通过Java的动态代理类实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值