首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

署理模式-静态

2012-10-25 
代理模式--静态代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,如图1所示。代理类主

代理模式--静态

代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,如图1所示。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。


署理模式-静态

图1:Proxy模式

?

按照代理类的创建时期,代理类可分为两种。

静态代理类:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理类:在程序运行时,运用反射机制动态创建而成。

?

静态代理类的实现:

?

1. 定义一个IService接口

package cn.lettoo.proxy;

public interface IService {

??? void execute();
}

?

2. 具体的实现类:

package cn.lettoo.proxy;

public class PrintService implements IService {

??? public void execute() {
??????? System.out.println("The Print Service works.");
??? }
}

?

3. 代理类:

package cn.lettoo.proxy;

public class PrintServiceProxy implements IService {

??? IService printSerivce;

??? public PrintServiceProxy(IService service) {
??????? this.printSerivce = service;
??? }

??? public void execute() {
??????? this.beforePrint();
??????? this.printSerivce.execute();
??????? this.afterPrint();
??? }

??? private void beforePrint() {
??????? System.out.println("Before print.");
??? }

??? private void afterPrint() {
??????? System.out.println("After print.");
??? }

}

??? 代理类的execute()方法只是调用了被代理的Service的execute方法,被代理的Service通过构造函数或者set的方式被注入到代理对象中。同时,代理对象也有一些自己的代理方法,如本例中在被代理类的execute()方法调用前后加上自己的方法。

?

4. 客户调用代码:

package cn.lettoo.proxy;

public class Client {

??? public static void main(String[] args) {
??????? IService service = new PrintService();
??????? IService proxy = new PrintServiceProxy(service);

??????? proxy.execute();
??? }
}

?

执行结果 Before print.
The Print Service works.
After?print.

热点排行