• 代理模式


    含义:

      为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。一个类代表另一个类的功能。这种类型的设计模式属于结构型模式

    结构:

      

    实现:

    1)静态代理模式

     1 服务类接口
     2 // 创建服务类接口
     3 public interface BuyHouse {
     4     void buyHouse();
     5 }
     6 实现服务类接口,顾客
     7 // 实现服务接口,这个类是一个顾客类,想要购买房屋
     8 public class Customer implements BuyHouse {
     9     public void buyHouse() {
    10         System.out.println("我要买房!");
    11     }
    12 }
    13 实现服务类接口,中介
    14 // 创建代理类,这个类是一个中介类,他负责为顾客买房
    15 public class Agency implements BuyHouse{
    16     private BuyHouse buy;
    17     public Agency(final BuyHouse buy) {
    18         this.buy = buy; 
    19     }
    20     public void buyHouse() {
    21         System.out.println("买房前准备");
    22         buy.buyHouse();
    23         System.out.println("买房后准备");
    24     }
    25 }

    优点:可以做到在符合开闭原则的情况下对目标对象进行功能扩展

    缺点:我们得为每一个服务都得创建代理类,工作量太大,不易管理。同时接口一旦发生改变,代理类也得相应修改。

    2)动态代理模式

     1 服务类接口
     2 // 创建服务类接口
     3 public interface BuyHouse {
     4     void buyHouse();
     5 }
     6 编写动态处理器
     7 public class DynamicProxy implements InvocationHandler{
     8     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
     9         System.out.println("开始执行方法");
    10         if("toString".equals(method.getName())) {
    11             return proxy.getClass().getName();
    12         }else if("buyHouse".equals(method.getName())) {
    13             System.out.println("准备购买房屋");
    14             return proxy; 
    15         }
    16         return null; 
    17     }
    18     public static <T> T newInstance(Class<T> c) {
    19         Class[] t = {c};
    20         Object obj = Proxy.newProxyInstance(DynamicProxy.class.getClassLoader(), t, new DynamicProxy());
    21         return (T)obj;
    22     }
    23 }

    优缺点:

      优点:1、职责清晰2、高扩展性3、智能化

      缺点:1、由于在客户端和真实主体之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。

         2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

    使用场景:

      远程代理、虚拟代理、Copy-on-Write代理、保护(Protect or Access)代理、Cache代理、防火墙(Firewall)代理、同步化(Synchronization)代理、智能引用(Smart Reference)代理

  • 相关阅读:
    HTML5存储
    HTML5全局属性和事件
    HTML5媒体(音频/视频)
    HTML5标签canvas制作动画
    HTML5标签canvas图像处理
    开发kendo-ui弹窗组件
    HTML5标签canvas制作平面图
    javascript匿名函数
    Javascript富文本编辑器
    快速排序算法(python版本)
  • 原文地址:https://www.cnblogs.com/HuiH/p/11950239.html
Copyright © 2020-2023  润新知