代理模式在企业级开发中的应用
来源:互联网 发布:油画照片是什么软件 编辑:程序博客网 时间:2024/04/29 01:00
//业务接口
public interface Service ...{
//两个方法声明
public void method1();
public void method2();
}
//业务逻辑组件,实现Service接口
public class ServiceImpl implements Service ...{
//实现接口实现的两个方法
public void method1() ...{
System.out.println("执行业务方法1");
}
public void method2() ...{
System.out.println("执行业务方法2");
}
}
//负责产生业务逻辑组件的工厂
public class ServiceFactory ...{
//将工厂设置成单态模式
private static ServiceFactroy sf;
//业务逻辑组件
private Service service;
//构造器私有,保证最多只能产生一个工厂
private ServiceFactory() ...{
}
//实例化工厂的方法
public static ServiceFactory instance() ...{
if (sf == null)
...{
sf = new ServiceFactory();
}
return sf;
}
//获取业务逻辑组件的方法
public Service getService(String impl) ...{
if (impl.equals("one"))
...{
if (service == null)
...{
service = new ServiceImpl();
}
}
return null;
}
}
//代理处理器,实现InvocationHandler
public class ProxyHandler implements InvocationHandler ...{
//target是被代理的目标对象
private Object target;
//invoke方法是实现InvocationHandler接口必须实现的方法,
//该方法会在目标对象方法被调用时,自动被调用
public Object invoke(Object proxy, Method method, Object[] args)
throws Exception ...{
Object result = null;
if (method.getName().equals("method1"))
...{
System.out.println("开始事务...");
result = method.invoke(target, args);
System.out.println("提交事务...");
}
else
...{
result = method.invoke(target, args);
}
return result;
}
public void setTarget(Object o) ...{
this.target = o;
}
}
//负责生成动态代理的代理工厂
public class MyProxyFactory ...{
public static Object getProxy(Object object) ...{
//代理处理类实例
ProxyHandler handler = new ProxyHandler();
//把该Service实例委托给代理操作
handler.setTarget(object);
//第一个参数是用来创建动态代理的ClassLoader对象,只要该对象能访问
//Service接口即可。第二个参数表明该代理所实现的所有接口,第三个参数
//是代理的处理类
return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.
getClass().getInstance(), handler);
}
}
public class TestService ...{
public static void main(String[] args) ...{
Service service = null;
//通过ServiceFactory生成Service实例,该Service实例是需要代理的目标对象
Service targetObject = ServiceFactory.instance().getService("one");
//根据目标对象,生成代理对象
Object proxy = MyProxyFactory.getProxy(targetObject);
//判断代理对象是否实现Service接口
if (proxy instanceof Service)
...{
//将代理对象转换Service实例
service = (Service)proxy;
}
//通过代理对象执行method1
service.method1();
service.method2();
}
}
==>
开始事务...
执行业务方法1
提交事务...
执行业务方法2
public interface Service ...{
//两个方法声明
public void method1();
public void method2();
}
//业务逻辑组件,实现Service接口
public class ServiceImpl implements Service ...{
//实现接口实现的两个方法
public void method1() ...{
System.out.println("执行业务方法1");
}
public void method2() ...{
System.out.println("执行业务方法2");
}
}
//负责产生业务逻辑组件的工厂
public class ServiceFactory ...{
//将工厂设置成单态模式
private static ServiceFactroy sf;
//业务逻辑组件
private Service service;
//构造器私有,保证最多只能产生一个工厂
private ServiceFactory() ...{
}
//实例化工厂的方法
public static ServiceFactory instance() ...{
if (sf == null)
...{
sf = new ServiceFactory();
}
return sf;
}
//获取业务逻辑组件的方法
public Service getService(String impl) ...{
if (impl.equals("one"))
...{
if (service == null)
...{
service = new ServiceImpl();
}
}
return null;
}
}
//代理处理器,实现InvocationHandler
public class ProxyHandler implements InvocationHandler ...{
//target是被代理的目标对象
private Object target;
//invoke方法是实现InvocationHandler接口必须实现的方法,
//该方法会在目标对象方法被调用时,自动被调用
public Object invoke(Object proxy, Method method, Object[] args)
throws Exception ...{
Object result = null;
if (method.getName().equals("method1"))
...{
System.out.println("开始事务...");
result = method.invoke(target, args);
System.out.println("提交事务...");
}
else
...{
result = method.invoke(target, args);
}
return result;
}
public void setTarget(Object o) ...{
this.target = o;
}
}
//负责生成动态代理的代理工厂
public class MyProxyFactory ...{
public static Object getProxy(Object object) ...{
//代理处理类实例
ProxyHandler handler = new ProxyHandler();
//把该Service实例委托给代理操作
handler.setTarget(object);
//第一个参数是用来创建动态代理的ClassLoader对象,只要该对象能访问
//Service接口即可。第二个参数表明该代理所实现的所有接口,第三个参数
//是代理的处理类
return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.
getClass().getInstance(), handler);
}
}
public class TestService ...{
public static void main(String[] args) ...{
Service service = null;
//通过ServiceFactory生成Service实例,该Service实例是需要代理的目标对象
Service targetObject = ServiceFactory.instance().getService("one");
//根据目标对象,生成代理对象
Object proxy = MyProxyFactory.getProxy(targetObject);
//判断代理对象是否实现Service接口
if (proxy instanceof Service)
...{
//将代理对象转换Service实例
service = (Service)proxy;
}
//通过代理对象执行method1
service.method1();
service.method2();
}
}
==>
开始事务...
执行业务方法1
提交事务...
执行业务方法2
- 代理模式在企业级开发中的应用
- Flex技术在企业级开发中的应用(转)
- Flex技术在企业级开发中的应用-网页设计
- 代理模式在Android中的应用
- 代理设计模式在页面中的应用
- 实例讲解如何在iOS应用开发中使用设计模式中的代理模式
- 设计模式在游戏中的应用--代理模式(四)
- 企业应用的互联网化-谈Flex在企业级开发中的应用
- InforGuard在电信行业企业级应用中的解决方案
- Finereport在企业级BI分析中的应用
- 企业级应用vs企业级开发
- 企业级应用vs企业级开发
- 设计模式在GIS开发中的应用
- 设计模式在游戏开发中的应用
- 设计模式 - 在软件开发中的应用
- MVC模式在IOS开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- 深入浅出 CPropertySheet
- 无延迟翻滚的图形与CSS混合风格按钮
- asp.net对XML的增删改查。
- 看三国演义中的生字
- 一个困扰两天的创建动态控件的问题
- 代理模式在企业级开发中的应用
- 十分钟内学会:将HTML格式化为合法的XML
- 关于三种主流WEB架构的思考
- 跨平台的网络通信中间件:ICE和ACE
- ASP.NET 程序中常用的三十三种代码
- CSS教程:li和ul标签用法举例
- 认识ASP.NET配置文件Web.config
- 国际化软件测试内容要点
- LOGO在线制作