• 代理设计模式


    1、主要解决的问题:

        客户端代码和实现代码的解耦合,代理类对实现类打理一切

        真正干活的那个类是要对客户端隐藏的

        代理类和实现类一般都会实现同一个接口(也可以不这么干)

        代理设计模式(Proxy)和状态模式(State)很类似,代理模式是状态模式的一种特例

        一个代理模式下的代理类一般只对应一个实现类;而一个状态模式下的代理类一般对应多个实现类

       代理模式主要目的是控制对实现类的访问

       状态模式主要目的是可以动态改变实现类

    2、插图

     插图以及UML图(Astah/jude) http://pan.baidu.com/s/1pJylLG3

    3、代码实现示例

    接口

     1 package com.xinye.test.proxy;
     2 /**
     3  * 
     4  * @author xinye
     5  *
     6  */
     7 public interface IProxy {
     8     void method1();
     9     void method2();
    10     void method3();
    11 }


    实现类:

     1 package com.xinye.test.proxy;
     2 /**
     3  * 被代理类
     4  * @author xinye
     5  *
     6  */
     7 public class ProxyImpl implements IProxy {
     8 
     9     @Override
    10     public void method1() {
    11         System.out.println(getClass().getSimpleName() + " method1() invoke");
    12     }
    13 
    14     @Override
    15     public void method2() {
    16         System.out.println(getClass().getSimpleName() + " method2() invoke");
    17     }
    18 
    19     @Override
    20     public void method3() {
    21         System.out.println(getClass().getSimpleName() + " method3() invoke");
    22     }
    23 
    24 }

    代理类:

     1 package com.xinye.test.proxy;
     2 /**
     3  * 代理类
     4  * @author xinye
     5  *
     6  */
     7 public class Proxy implements IProxy {
     8     // 被代理的对象
     9     private IProxy impl;
    10     
    11     public Proxy(){
    12         impl = new ProxyImpl();
    13     }
    14     
    15     @Override
    16     public void method1() {
    17         impl.method1();
    18     }
    19 
    20     @Override
    21     public void method2() {
    22         impl.method2();
    23     }
    24 
    25     @Override
    26     public void method3() {
    27         impl.method3();
    28     }
    29 
    30 }

    客户端代码:

     1 package com.xinye.test.proxy;
     2 /**
     3  * 
     4  * @author xinye
     5  *
     6  */
     7 public class Client {
     8     public static void main(String[] args) {
     9         Proxy proxy = new Proxy();
    10         
    11         proxy.method1();
    12         proxy.method2();
    13         proxy.method3();
    14     }
    15 }
  • 相关阅读:
    转:高并发场景下强一致预算/库存扣减方案
    转:Dubbo性能调优参数及原理
    转:java线程状态说明,Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释
    使用增强学习法之SQ3R主动阅读
    建立实用投资计划
    使用smarty方法实现目标
    主动学习
    小知识
    大脑的处理模式
    真正的随笔
  • 原文地址:https://www.cnblogs.com/xinye/p/3907490.html
Copyright © 2020-2023  润新知