这里有新鲜出炉的Java设计模式,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要帮助大家轻松掌握Java代理模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
特点:
1、真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
2、代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
3、扩展性高
企业级开发和常用框架中的应用:最著名的就是spring的aop,还有spring的bean的创建其实也用到了代理
代理模式分为了动态代理和静态代理,动态代理是开发中应用的特别多。
静态代理:
- /**
- * 以买房举例
- */
- interface Actions {
- /**
- * 选房
- */
- public void selectHouse();
- /**
- * 看房
- */
- public void seeHouse();
- /**
- * 入住
- */
- public void ruzhu();
- }
- class RealRole implements Actions {
- public void selectHouse() {
- System.out.println("用户自己选房");
- }
- public void seeHouse() {
- System.out.println("用户自己看房");
- }
- public void ruzhu() {
- System.out.println("用户自己入住");
- }
- }
- class ProxyRole implements Actions {
- private RealRole realRole;
- public ProxyRole(RealRole realRole) {
- this.realRole = realRole;
- }
- public void selectHouse() {
- System.out.println("中介选房");
- }
- public void seeHouse() {
- System.out.println("中介看房");
- }
- @Override public void ruzhu() {
- realRole.ruzhu();
- }
- }
- public class Demo {
- public static void main(String[] args) {
- RealRole realRole = new RealRole();
- ProxyRole proxyRole = new ProxyRole(realRole);
- proxyRole.selectHouse();
- proxyRole.seeHouse();
- proxyRole.ruzhu();
- }
- }
动态代理:
- /**
- * 以买房举例
- */
- interface Actions {
- /**
- * 选房
- */
- public void selectHouse();
- /**
- * 看房
- */
- public void seeHouse();
- /**
- * 入住
- */
- public void ruzhu();
- }
- class RealRole implements Actions {
- public void selectHouse() {
- System.out.println("用户自己选房");
- }
- public void seeHouse() {
- System.out.println("用户自己看房");
- }
- public void ruzhu() {
- System.out.println("用户自己入住");
- }
- }
- class Handler implements InvocationHandler {
- private RealRole realRole;
- public Handler(RealRole realRole) {
- this.realRole = realRole;
- }
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- System.out.println(realRole);
- System.out.println("中介选房,看房");
- method.invoke(realRole, args);
- return null;
- }
- }
- public class Demo {
- public static void main(String[] args) {
- RealRole realRole = new RealRole();
- Handler handler = new Handler(realRole);
- Actions proxy = (Actions) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[] {
- Actions.class
- },
- handler);
- proxy.ruzhu();
- }
- }
来源: http://www.phperz.com/article/17/1120/359827.html