設(shè)計(jì)模式(2) 代理模式 靜態(tài)代理

  • 需求:設(shè)計(jì)一個(gè)車類芥驳,具有方法run,現(xiàn)需要設(shè)計(jì)一個(gè)方案計(jì)算它的前后行駛時(shí)間谭期。

  • 一般來說該類可以這樣寫

public class car{
    long start,end;
    private void before(){
        start=System.currentTimeMillis();
        System.out.println("開車前時(shí)間:"+start);
    }
    private void after(){
        end=System.currentTimeMillis();
        System.out.println("開車后時(shí)間:"+end+".\n總耗時(shí):"+(end-start)+"毫秒");
    }
    pubic void run(){
        try {
            after();
            System.out.println("正在開車~~~");
            Thread.sleep((int)(Math.random()*100));
            before();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
  • 結(jié)果為:

開車前時(shí)間:1503127134747
正在開車~~~
開車后時(shí)間:1503127135124.
總耗時(shí):377毫秒

Process finished with exit code 0

但是為了可以擴(kuò)展堵第,一般采取寫法
Icar.java (汽車接口)

package cn.niriqiang.demo;

/**
 * Created by fengyuwusong on 2017/8/19 14:53.
 */
public interface ICar {
    public void run();
}

CarImpl 汽車實(shí)現(xiàn)類

package cn.niriqiang.demo;

/**
 * Created by fengyuwusong on 2017/8/19 14:54.
 */
public class CarImpl implements ICar{
    @Override
    public void run() {
        try {
            System.out.println("正在開車~~~");
            Thread.sleep((int)(Math.random()*1000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

CarProxy 汽車計(jì)時(shí)功能代理

package cn.niriqiang.demo;

/**
 * Created by fengyuwusong on 2017/8/19 14:58.
 */
public class Carproxy implements ICar{
    private ICar car;
    long start,end;
    public Carproxy(ICar car) {
        this.car = car;
    }

    @Override
    public void run() {
        before();
        car.run();
        after();

    }

    private void before(){
        start=System.currentTimeMillis();
        System.out.println("開車前時(shí)間:"+start);

    }

    private void after(){
        end=System.currentTimeMillis();
        System.out.println("開車后時(shí)間:"+end+".\n總耗時(shí):"+(end-start)+"毫秒");
    }
}

main 測(cè)試方法

package cn.niriqiang.demo;

/**
 * Created by fengyuwusong on 2017/8/19 14:55.
 */
public class main {

    public static void main(String[] args) {
        ICar car=new CarImpl();
        Carproxy carproxy=new Carproxy(car);
        carproxy.run();
    }
}

以上寫法即為代理模式的靜態(tài)代理,這樣的好處是加入需求改變隧出,需要在汽車行駛前后添加新功能時(shí)踏志,我們可以根據(jù)功能給汽車添加新的代理,例如:

CarLogProxy.java 給汽車添加日志功能

package cn.niriqiang.demo;

/**
 * Created by fengyuwusong on 2017/8/19 15:27.
 */
public class CarLogProxy implements ICar{
    ICar car;

    public CarLogProxy(ICar car) {
        this.car = car;
    }


    private void before(){
        System.out.println("開車前日志:xxxxx...");
    }

    private void after(){
        System.out.println("開車后日志:xxxxx...");
    }

    @Override
    public void run() {
        before();
        car.run();
        after();
    }
}

我們給man方法稍作改變即可得到新功能(既添加了計(jì)時(shí)又添加了日志功能的汽車)

package cn.niriqiang.demo;

/**
 * Created by fengyuwusong on 2017/8/19 14:55.
 */
public class main {

    public static void main(String[] args) {
        ICar car=new CarImpl();
        Carproxy carproxy=new Carproxy(car);
        CarLogProxy carLogProxy=new CarLogProxy(carproxy);
        carLogProxy.run();
    }
}

結(jié)果

開車前日志:xxxxx...
開車前時(shí)間:1503127842768
正在開車~~~
開車后時(shí)間:1503127842835.
總耗時(shí):67毫秒
開車后日志:xxxxx...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胀瞪,一起剝皮案震驚了整個(gè)濱河市针余,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖圆雁,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忍级,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡伪朽,警方通過查閱死者的電腦和手機(jī)轴咱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驱负,“玉大人嗦玖,你說我怎么就攤上這事患雇≡炯梗” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵苛吱,是天一觀的道長(zhǎng)酪术。 經(jīng)常有香客問我,道長(zhǎng)翠储,這世上最難降的妖魔是什么绘雁? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮援所,結(jié)果婚禮上庐舟,老公的妹妹穿的比我還像新娘。我一直安慰自己住拭,他們只是感情好挪略,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滔岳,像睡著了一般杠娱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谱煤,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天摊求,我揣著相機(jī)與錄音,去河邊找鬼刘离。 笑死室叉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硫惕。 我是一名探鬼主播茧痕,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼疲憋!你這毒婦竟也來了凿渊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎埃脏,沒想到半個(gè)月后搪锣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彩掐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年构舟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堵幽。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狗超,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朴下,到底是詐尸還是另有隱情努咐,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布殴胧,位于F島的核電站渗稍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏团滥。R本人自食惡果不足惜竿屹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灸姊。 院中可真熱鬧拱燃,春花似錦、人聲如沸力惯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夯膀。三九已至诗充,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诱建,已是汗流浹背蝴蜓。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俺猿,地道東北人茎匠。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像押袍,于是被迫代替她去往敵國(guó)和親诵冒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理谊惭,服務(wù)發(fā)現(xiàn)汽馋,斷路器侮东,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,770評(píng)論 25 707
  • 小時(shí)候的我們總是憧憬未來,總想盼望長(zhǎng)大豹芯,但直到長(zhǎng)大了才會(huì)知道小時(shí)候的自己是最無拘無束的悄雅。 昨晚一夜未睡,突然想起我...
    盧筱茹同學(xué)閱讀 245評(píng)論 0 0
  • 芒種 大汗日淋漓 非是為稼穡 街巷起雷聲 烏云暗樓宇 昨日芒種到 江南入梅時(shí) 窗外雨漫漫 新試薄紗衣 櫻桃黃李熟 ...
    emika閱讀 515評(píng)論 0 0