<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
    數(shù)據(jù)加載中……

    淺淡Java代理模式之秘書MM

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

    設(shè)老總=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("我請大家吃飯。");

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

    通過上面發(fā)現(xiàn),這種代理比較呆板,比如說,Boss口渴了,又得重新寫一個(gè)代理方法,這個(gè)時(shí)候,可以使用動(dòng)態(tài)代理來進(jìn)行:

    添加一個(gè)接口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 }

    這時(shí)秘書MM變?yōu)?/div>
     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想喝水了,于是 把水倒進(jìn)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想喝水了,于是 把水倒進(jìn)boss的杯子里。
    boss: 拿起杯子,喝水

    現(xiàn)在發(fā)現(xiàn)了吧,秘書MM真是服務(wù)周到呀。

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

    主站蜘蛛池模板: 67194成是人免费无码| 中文字幕亚洲不卡在线亚瑟| 国产亚洲福利一区二区免费看| 免费中文字幕不卡视频| 野花香高清在线观看视频播放免费| 亚洲最新在线视频| 免费大片黄手机在线观看| 亚洲一区免费观看| 久久亚洲精品11p| 亚洲电影国产一区| 四虎免费久久影院| 5555在线播放免费播放| 亚洲AV成人精品一区二区三区| 亚洲精品少妇30p| 女性自慰aⅴ片高清免费| 日本道免费精品一区二区| 亚洲字幕AV一区二区三区四区| 亚洲欧洲自拍拍偷午夜色无码| 欧洲乱码伦视频免费| 亚洲一级片免费看| 亚洲中文字幕无码中文字| 青青草原亚洲视频| 好吊妞在线新免费视频| 久久久久免费看成人影片| 美女又黄又免费的视频| 亚洲人成网站日本片| 亚洲日韩VA无码中文字幕 | 亚洲国产精品无码久久久| 亚洲成AV人在线观看网址| 99久久免费国产精品特黄| 黄色片免费在线观看| 免费的黄网站男人的天堂| 亚洲中文字幕在线无码一区二区| 亚洲国产精品无码AAA片| 四虎精品亚洲一区二区三区| 24小时日本在线www免费的| 67194成手机免费观看| 光棍天堂免费手机观看在线观看| 老司机午夜在线视频免费| 亚洲欧美日韩中文无线码| 亚洲视频在线一区二区三区|