<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

    主站蜘蛛池模板: 在线永久免费的视频草莓| 国产成人精品日本亚洲语音| 亚洲av最新在线网址| 国产成人亚洲精品狼色在线| 亚洲国产91精品无码专区| 人人狠狠综合久久亚洲高清| 又爽又黄无遮挡高清免费视频 | 亚洲av专区无码观看精品天堂| 亚洲日产2021三区| 亚洲一区二区三区免费在线观看| 亚洲一区无码中文字幕乱码| 亚洲日韩乱码中文字幕| 大桥未久亚洲无av码在线| 香蕉视频在线观看免费| 一区二区三区在线观看免费| 中文字幕不卡免费高清视频| 国产免费一区二区三区不卡 | 中文日韩亚洲欧美制服| 亚洲一区二区三区在线观看网站| 亚洲成av人在线观看网站| 美女被艹免费视频| 中文字幕永久免费视频| 色欲国产麻豆一精品一AV一免费 | 色婷婷综合缴情综免费观看| 国产va免费精品| 日韩人妻无码精品久久免费一| 在线观看H网址免费入口| 蜜臀91精品国产免费观看| 免费a级黄色毛片| 亚洲国产精品高清久久久| 亚洲日韩乱码中文无码蜜桃臀| 亚洲午夜无码久久久久小说| 老妇激情毛片免费| 免费毛片a线观看| 免费无码又爽又刺激聊天APP| 免费国产在线观看| 亚洲色欲久久久综合网东京热| 亚洲精品国产第1页| MM1313亚洲精品无码久久| a级成人毛片免费视频高清| 亚洲高清国产AV拍精品青青草原|