一、代理模式
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后 处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的 对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两种。
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行时,运用反射机制动态创建而成。
二、静态代理模式
1 package com.swust.dao 2 /** 3 * 定义一个账户接口 4 * 5 * @author Administrator 6 * 7 */ 8 public interface Count { 9 // 查看账户方法 10 public void queryCount(); 11 // 修改账户方法 12 public void updateCount(); 13 } 14 15 package com.swust.dao.imple 16 public class CountImpl implements Count { 17 @Override 18 public void queryCount() { 19 System.out.println("查看账户方法..."); 20 } 21 @Override 22 public void updateCount() { 23 System.out.println("修改账户方法..."); 24 } 25 } 26 27 public class CountProxy implements Count { 28 private CountImpl countImpl; 29 30 /** 31 * 覆盖默认构造器 32 * 33 * @param countImpl 34 */ 35 public CountProxy(CountImpl countImpl) { 36 this.countImpl = countImpl; 37 } 38 39 @Override 40 public void queryCount() { 41 System.out.println("事务处理之前"); 42 // 调用委托类的方法; 43 countImpl.queryCount(); 44 System.out.println("事务处理之后"); 45 } 46 47 @Override 48 public void updateCount() { 49 System.out.println("事务处理之前"); 50 // 调用委托类的方法; 51 countImpl.updateCount(); 52 System.out.println("事务处理之后"); 53 } 54 } 55 56 57 58 package net.battier.test; 59 60 import net.battier.dao.impl.CountImpl; 61 import net.battier.dao.impl.CountProxy; 62 63 /** 64 *测试Count类 65 * 66 * @author Administrator 67 * 68 */ 69 public class TestCount { 70 public static void main(String[] args) { 71 CountImpl countImpl = new CountImpl(); 72 CountProxy countProxy = new CountProxy(countImpl); 73 countProxy.updateCount(); 74 countProxy.queryCount(); 75 76 } 77 }