zoukankan      html  css  js  c++  java
  • 代理设计模式

    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 }
  • 相关阅读:
    php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
    laravel 事件广播
    windows apache 配置多个服务 站点 Apache Service Monitor
    apache配置多站点
    querySelector和querySelectorAll方法介绍
    document.domain与js跨域的问题
    用JS判断用户使用的是手机端还是pc端访问
    下载的firebug-lite压缩包的调用方法
    JS实现常用的分享到按钮
    转:不会定义jQuery插件,不要说会jQuery
  • 原文地址:https://www.cnblogs.com/xinye/p/3907490.html
Copyright © 2011-2022 走看看