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

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

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

    ??? 1:代理模式:
    ??? 為其它對象提供一種代理以控制對目標(biāo)對象的訪問。
    即第三方對象通過訪問代理對象而達到訪問目標(biāo)對象之目的,與此同時,代理對象在訪問目標(biāo)對象前后加入特定的邏輯以實現(xiàn)功能的擴展。
    ???? 以靜態(tài)代理為例:
    package?static_proxy;

    public?interface?Movable?{
    ????
    public?void?move();

    }

    package?static_proxy;

    import?java.util.Random;

    public?class?Tank?implements?Movable?{
    ????@Override
    ????
    public?void?move()?{
    ????????System.out.println(
    "?Tank?is?moving??");
    ????????
    try?{
    ????????????Thread.sleep(
    new?Random().nextInt(1000));
    ????????}?
    catch?(InterruptedException?e)?{
    ????????????e.printStackTrace();
    ????????}
    ????}
    }

    package?static_proxy;

    public?class?TankLogProxy?implements?Movable?{
    ????
    private?Movable?obj;
    ????
    public?TankLogProxy(Movable?obj)?{
    ????????
    super();
    ????????
    this.obj?=?obj;
    ????}
    ????@Override
    ????
    public?void?move()?{
    ????????System.out.println(
    "the?log?is?begin??");
    ????????obj.move();
    ????????System.out.println(
    "the?log?is?end??");
    ????}
    }

    package?static_proxy;

    public?class?TankTimeProxy?implements?Movable?{????
    ????
    private?Movable?obj;
    ????
    public?TankTimeProxy(Movable?obj)?{
    ????????
    super();
    ????????
    this.obj?=?obj;
    ????}
    ????@Override
    ????
    public?void?move()?{
    ????????
    long?begintime?=?System.currentTimeMillis();
    ????????System.out.println(
    "?Tank?is?begining?to?move?!");
    ????????obj.move();
    ????????
    long?endtime?=?System.currentTimeMillis();
    ????????System.out.println(
    "?Tank?is?stop?!");
    ????????System.out.println(
    "move?time?:?"+(endtime-begintime));
    ????}
    }

    package?static_proxy;
    public?class?Client?{
    ????
    /**
    ?????*?
    @param?args
    ?????
    */
    ????
    public?static?void?main(String[]?args)?{
    ????????Movable?tankTime?
    =?new?TankTimeProxy(new?Tank());
    ????????Movable?tankLog?
    =?new?TankLogProxy(tankTime);
    ????????tankLog.move();
    ????}
    }

    代理模式:目標(biāo)對象和代理對象實現(xiàn)同一接口;代理對象訪問目標(biāo)對象時在其前后加入一定的邏輯實現(xiàn)功能擴展;可多次代理。

    2.裝飾者模式:
    ????

    動態(tài)地給一個對象添加一些額外的職責(zé)。就增加功能來說,裝飾模式相比生成子類更加靈活。


    package?decorator;

    public?abstract?class?car_parent?{
    ????
    //?汽車抽象父類
    ????private?String?make_address;
    ????
    private?int?speed;

    ????
    public?String?getMake_address()?{
    ????????
    return?make_address;
    ????}

    ????
    public?void?setMake_address(String?make_address)?{
    ????????
    this.make_address?=?make_address;
    ????}

    ????
    public?int?getSpeed()?{
    ????????
    return?speed;
    ????}

    ????
    public?void?setSpeed(int?speed)?{
    ????????
    this.speed?=?speed;
    ????}

    ????
    public?abstract?void?print_face();

    }


    package?decorator;

    public?abstract?class?decorator_parent?extends?car_parent?{
    ????
    //?裝飾者父類
    ????protected?car_parent?car_parent_ref;

    ????
    public?decorator_parent(car_parent?carParentRef)?{
    ????????
    super();
    ????????car_parent_ref?
    =?carParentRef;
    ????}
    ????@Override
    ????
    public?void?print_face()?{
    ????????car_parent_ref.print_face();
    ????}

    }

    package?decorator;
    public?class?decorator_audi_red?extends?decorator_parent?{
    ????
    public?decorator_audi_red(car_parent?carParentRef)?{
    ????????
    super(carParentRef);
    ????}
    ????@Override
    ????
    public?void?print_face()?{
    ????????
    super.print_face();
    ????????System.out.println(
    "給 奧迪 噴涂鴉 - 顏色為 紅色火焰");
    ????}
    }

    package?decorator;
    public?class?decorator_audi_purple?extends?decorator_parent?{

    ????
    public?decorator_audi_purple(car_parent?carParentRef)?{
    ????????
    super(carParentRef);
    ????}
    ????@Override
    ????
    public?void?print_face()?{
    ????????
    super.print_face();
    ????????System.out.println(
    "給 奧迪 噴涂鴉 - 顏色為 紫色霞光");
    ????}
    }

    package?decorator;

    public?class?main_run?{
    ????
    public?static?void?main(String[]?args)?{

    ????????car_parent?audi_sub_ref?
    =?new?audi_sub();
    ????????audi_sub_ref.setMake_address(
    "北京市朝陽區(qū)");
    ????????audi_sub_ref.setSpeed(
    200);
    ????????
    ????????decorator_audi_red?decorator_audi_red_ref?
    =?new?decorator_audi_red(audi_sub_ref);

    ????????decorator_audi_purple?decorator_audi_purple_ref?
    =?new?decorator_audi_purple(decorator_audi_red_ref);
    ????????decorator_audi_purple_ref.print_face();
    ????}
    }

    裝飾者模式:裝飾者和被裝飾者應(yīng)繼承或?qū)崿F(xiàn)同一父類或接口,以表示它們?yōu)橥活悓ο螅ǚ潜仨殻谎b飾者對象對被裝飾者對象增加一定的職責(zé);可多次裝飾。

    可以發(fā)現(xiàn):代理模式和裝飾者模式上在語法形式上幾乎完全一樣,那么它們的區(qū)別在哪里呢?
    裝飾者模式:動態(tài)地給一個對象添加一些額外的職責(zé)。就增加功能來說,裝飾模式相比生成子類更加靈活
    代理模式:為其它對象提供一種代理以控制對這個對象的訪問。


    其實,它們的著重點一個在于“增加”職責(zé),另一個在于“控制”訪問。這是它們最本質(zhì)的區(qū)別。

    由此可以看到:學(xué)習(xí)設(shè)計模式重點在于“語義”上把握,而不是追求它的“形式。

    Feedback

    # re: 胡說八道:代理模式和裝飾者模式的異同點比較  回復(fù)  更多評論   

    2010-09-02 10:21 by bonamana
    其實,它們的著重點一個在于“增加”職責(zé),另一個在于“控制”訪問。這是它們最本質(zhì)的區(qū)別。

    由此可以看到:學(xué)習(xí)設(shè)計模式重點在于“語義”上把握,而不是追求它的“形式

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 好吊妞在线新免费视频| 精品国产免费观看久久久| 日韩一区二区免费视频| 亚洲人成亚洲人成在线观看| 亚洲一卡2卡3卡4卡国产网站| 免费看一级一级人妻片| 国产成人精品免费午夜app| 亚洲av麻豆aⅴ无码电影| 精品亚洲麻豆1区2区3区| 日本激情猛烈在线看免费观看| 8x8×在线永久免费视频| mm1313亚洲精品国产| 亚洲成aⅴ人在线观看| 亚洲阿v天堂在线2017免费| 18国产精品白浆在线观看免费| 亚洲人成人无码网www国产| 亚洲一区精品视频在线| 91在线免费视频| 国产黄色片在线免费观看| 亚洲精品综合久久中文字幕| 精品亚洲成a人在线观看| 99久久精品日本一区二区免费| 国产成人亚洲精品影院| 亚洲日韩AV一区二区三区中文| 在线人成免费视频69国产| 免费又黄又爽的视频| 亚洲av无码不卡久久| 最近免费mv在线观看动漫| 国产精品另类激情久久久免费| 亚洲精品在线电影| 本免费AV无码专区一区| 免费永久在线观看黄网站| 亚洲噜噜噜噜噜影院在线播放| 免费无码又爽又刺激网站| 免费一级特黄特色大片在线| 亚洲一区二区三区精品视频| 久久午夜羞羞影院免费观看| 激情97综合亚洲色婷婷五 | 亚洲人成在线影院| 国产精品成人69XXX免费视频| 国产大片免费观看中文字幕|