<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      設計模式-代理模式

      1、簡述

      代理模式中可以映射為現實生活中的生產者、中介商、消費者,生產者可抽象為委托類,中介商可抽象為代理類,消費者可以抽象為調用者對象。代理模式可以簡化消費者購買商品的模式,比如超市里面可以購買各種商品,消費者只需要找到超市和超市里面商品即可,不需跑到各個生產商品的工廠。

      優點一:可以隱藏委托類的實現;
      優點二:可以實現客戶與委托類間的解耦,在不修改委托類代碼的情況下能夠做一些額外的處理。

      2、靜態代理類

      若代理類在程序運行前就已經存在,那么這種代理方式被成為 靜態代理 ,這種情況下的代理類通常都是我們在Java代碼中定義的。 通常情況下, 靜態代理中的代理類和委托類會實現同一接口或是派生自相同的父類。

      3、動態代理

      (1)InvocationHandler接口
      在使用動態代理時,我們需要定義一個位于代理類與委托類之間的中介類,這個中介類被要求實現InvocationHandler接口,這個接口的定義如下:

      public interface InvocationHandler {
       Object invoke(Object proxy, Method method, Object[] args); 
        }

      (2)委托類的定義
      動態代理方式下,要求委托類必須實現某個接口,這里我們實現的是Sell接口。委托類Vendor類的定義如下:

      public class Vendor implements Sell {
        public void sell() {
        System.out.println("In sell method"); 
        }
        
      public void ad() {
        System,out.println("ad method")
        }
          } 

      (3)中介類
      上面我們提到過,中介類必須實現InvocationHandler接口,作為調用處理器”攔截“對代理類方法的調用。中介類的定義如下:

      public class DynamicProxy implements InvocationHandler {
        private Object obj; //obj為委托類對象;
        public DynamicProxy(Object obj) {
        this.obj = obj;
        }
       
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
        System.out.println("before");
        Object result = method.invoke(obj, args);
        System.out.println("after");
        return result;
        }
            
      (4)動態生成代理類
      public class Main {
        public static void main(String[] args) {
        //創建中介類實例
        DynamicProxy inter = new DynamicProxy(new Vendor());
        //加上這句將會產生一個$Proxy0.class文件,這個文件即為動態生成的代理類文件
        System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles","true");
        //獲取代理類實例sell
        Sell sell = (Sell)(Proxy.newProxyInstance(Sell.class.getClassLoader(), new Class[] {Sell.class}, inter)); 
        //通過代理類對象調用代理類方法,實際上會轉到invoke方法調用
        sell.sell();
        sell.ad();
        }
      (5)運行結果
      before
      In sell method
      after
      before
      In ad method
      after
       

       

      posted @ 2017-11-22 11:38  快樂的追求  閱讀(211)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产高潮刺激叫喊视频| 亚洲国产精品嫩草影院久久| 国产乱老熟女乱老熟女视频| 日韩精品人妻系列无码av东京| 国产亚洲综合区成人国产| 亚洲伊人久久综合成人| 亚洲色大成网站www看下面| 污污内射在线观看一区二区少妇| 日韩av在线一区二区三区| 国产99视频精品免费专区| 小嫩模无套内谢第一次| 国产成人a∨激情视频厨房| 国产亚洲精品国产福APP| 99在线 | 亚洲| 在线观看潮喷失禁大喷水无码| 亚洲国产精品综合久久20| 亚洲aⅴ综合av国产八av| 好吊妞| 国产精品久久久久影院亚瑟| 国产成人亚洲欧美二区综合| 亚洲性日韩一区二区三区| 国产精品国产三级国快看| 免费成人网一区二区天堂| 亚洲大尺度无码专区尤物| 中文字幕日韩有码av| 亚洲精品成人久久av| 国产愉拍91九色国产愉拍| 人与禽交av在线播放| 性xxxx视频播放免费| 99国产午夜福利在线观看| 男女xx00xx的视频免费观看| 呦系列视频一区二区三区| 国产精品久久久久久久久人妻| 亚洲一级特黄大片在线观看| 欧美野外伦姧在线观看| 宫西光有码视频中文字幕| 云安县| 免费看欧美日韩一区二区三区| 亚洲欧美日韩精品色xxx| 麻豆一区二区三区蜜桃免费| 性色av极品无码专区亚洲|