<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    leisure

    JAVA - exceed,helloworld
    隨筆 - 50, 文章 - 0, 評論 - 11, 引用 - 0
    數據加載中……

    淺淡Java代理模式之秘書MM

    代理對象一般定義了一個與目標對象相似或相近的行為。代理對象負責對真實模塊調用,這使得調用者與被調用者之間建立了一個隔離帶。
    場景示例說明:老總說話都是很精簡,每次發布一個消息時,總是先將簡要內容交給秘書MM,秘書MM經過一番美化后,把消息公布出來。

    設老總=Boss,秘書MM=MMProxy

    于是簡單的代理就有
    1 public class Boss {
    2     public void anounce(String content) {
    3         System.out.println(content);
    4     }
    5 }

    1 public class MMProxy {
    2     public void anounce(String content) {
    3         System.out.print("boss: 大家請注意了!");
    4         new Boss().anounce(content);
    5     }
    6 }

    new MMProxy().anounce("我請大家吃飯。");

    結果出來的是:
    boss: 大家請注意了!我請大家吃飯。

    通過上面發現,這種代理比較呆板,比如說,Boss口渴了,又得重新寫一個代理方法,這個時候,可以使用動態代理來進行:

    添加一個接口IBoss
    1 public interface IBoss {
    2     public void anounce(String content);
    3     public void drink();
    4 }

    修改Boss
    1 public class Boss implements IBoss {
    2     public void anounce(String content) {
    3         System.out.println(content);
    4     }
    5 
    6     public void drink() {
    7         System.out.println("boss: 拿起杯子,喝水");
    8     }
    9 }

    這時秘書MM變為
     1 import java.lang.reflect.InvocationHandler;
     2 import java.lang.reflect.Method;
     3 
     4 public class MMProxy implements InvocationHandler {
     5 
     6     private Object obj;
     7 
     8     public MMProxy(Object obj) {
     9         this.obj = obj;
    10     }
    11 
    12     public static Object newInstance(Object obj) {
    13         return java.lang.reflect.Proxy.newProxyInstance(
    14             obj.getClass().getClassLoader(),
    15             obj.getClass().getInterfaces(),
    16             new MMProxy(obj));
    17     }
    18     
    19     @Override
    20     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    21         if("drink".equals(method.getName())) {
    22             System.out.println("秘書MM: 看到boss想喝水了,于是 把水倒進boss的杯子里。");
    23         } else if("anounce".equals(method.getName())) {
    24             System.out.print("boss: 大家請注意!");
    25         }
    26         method.invoke(obj, args);
    27         return null;
    28     }
    29 }

            IBoss boss = (IBoss) MMProxy.newInstance(new Boss());
            boss.anounce(
    "我請大家吃飯。");
            boss.drink();

    boss: 大家請注意!我請大家吃飯。
    秘書MM: 看到boss想喝水了,于是 把水倒進boss的杯子里。
    boss: 拿起杯子,喝水

    現在發現了吧,秘書MM真是服務周到呀。

    posted on 2011-12-09 09:54 leisure 閱讀(258) 評論(0)  編輯  收藏 所屬分類: java

    主站蜘蛛池模板: 人人揉揉香蕉大免费不卡| 日韩精品无码永久免费网站| 国产激情免费视频在线观看| 亚洲精品无码永久在线观看| 含羞草国产亚洲精品岁国产精品| 免费观看理论片毛片| 中文字幕乱码亚洲无线三区 | 日本系列1页亚洲系列| 免费看大美女大黄大色| 亚洲天堂免费在线| 女人张开腿等男人桶免费视频 | 美女视频黄a视频全免费网站色| 日日操夜夜操免费视频 | 一级毛片免费毛片毛片| 亚洲人成网站18禁止一区| 黄页网址在线免费观看| 亚洲精品国自产拍在线观看| 久久精品免费大片国产大片| 亚洲成AV人在线播放无码| 国产精品视频白浆免费视频| 亚洲精品综合一二三区在线| 91精品全国免费观看含羞草| 激情五月亚洲色图| 国产美女做a免费视频软件| 麻豆va在线精品免费播放| 中文亚洲成a人片在线观看| 日本卡1卡2卡三卡免费| 亚洲国产精品网站久久| 在线免费视频一区| 亚洲免费在线观看| 亚洲视频在线不卡| 免费高清资源黄网站在线观看| 一区二区三区免费精品视频| 亚洲AV无码成人网站久久精品大| 国产精品久久永久免费| 日日摸日日碰夜夜爽亚洲| 亚洲精品无码专区在线在线播放| 国产成人精品免费视频大| 亚洲AV噜噜一区二区三区| 在线观看亚洲av每日更新 | 天天拍拍天天爽免费视频 |