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

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

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

    ColorPicTips on Getting StartedColorPic

    隨筆 - 4  文章 - 7  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    After you've installed the ColorPic you might be wondering how to get started picking colors. Use the tips below to get started selecting colors and use a few advanced features that you might not have know about too.

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    http://cwj-0122.cnblogs.com/

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    繼續(xù)(2)
    主要模式:iterator, adater, chain of responsibility, builder, proxy, decorator, (template)strategy, bridge, state, visitor,observer, command, mediator
    7.template(繼承與多態(tài))
    template算是繼承概念里的一個(gè)模式,這里提前說了,因?yàn)椋艺J(rèn)為,他跟strategy有類似之處,所以提前。這結(jié)構(gòu)很簡(jiǎn)單,主要利用了面向?qū)ο蟮亩鄳B(tài)特性,抽象類定義的具體實(shí)現(xiàn)綁定到派生類,而父類提供了一個(gè)模板,來組織全部或部分的結(jié)構(gòu),從而提供了具有某種普遍一樣的行為。具體代碼如下:
    abstract class AbstractClass{
        public void templateMethod(){
           method1();
           method2();
       }
       abstract public void method1();
       abstract public void method2();
    }
    class ConcreteClass extends AbstractClass{
       public void method1(){
       }
       public void method2(){  
       }
    }
    void main(){
       AbstractClass abstractClass = new ConcreteClass();
       abstractClass.templateMethod();
    }
    8.strategy(單向簡(jiǎn)單委托):但是,如果你在設(shè)計(jì)中發(fā)現(xiàn),這種高度耦合的結(jié)構(gòu)解決不了你的問題,那么我會(huì)推薦采用另一種方案---strategy。該方案同樣使用委托,它把通用模板放到了一個(gè)獨(dú)立的類中,給該類注入一個(gè)被委托對(duì)象實(shí)例,然后模板的每一個(gè)執(zhí)行步驟,交給被委托者一一執(zhí)行。看例子:
    class Strategy{
         public void method1(){
         }
         public void method2(){
         }
    }
    class Context{
         private Strategy strategy;
         public Context(Strategy strategy){
            this.strategy = strategy;
         }
         public void algorithmMethod(){
            strategy.method1();
            strategy.method2();
         }
    }
    void main(){
        Context context = new Context(new Strategy());
        context.algorithmMethod();
    }
    也許,你看到這樣的結(jié)構(gòu),在哪里?builder模式,對(duì)了,看起來,真象孿生兄弟。但是,區(qū)別在哪里呢?該模式側(cè)重于算法,某一天,你想到新的改進(jìn)算法,你完全可以替換該strategy,我想你記得,本文到頭到尾都再依賴具體類,Context里的Strategy本該是接口或抽象類的。真正設(shè)計(jì)時(shí),我們會(huì)考慮這點(diǎn)。而對(duì)于,builder側(cè)重于建造步驟,當(dāng)然,如果,哪天你如果突然覺得有一種方式能夠更好的建造房屋,那你就去改進(jìn)房屋的建造細(xì)節(jié)吧。
    9.bridge(單向簡(jiǎn)單委托)
    10.state(單向簡(jiǎn)單委托)
    11.visitor(無任何委托)
    我說沒任何委托,因?yàn)椋覜]發(fā)現(xiàn),委托者手里揣這被委托者,同時(shí)被委托者手里也毫無東西。然而,我還是說它是一種委托,而且是雙向簡(jiǎn)單委托。或許我該把類似這樣的無任何委托的東西定義為臨時(shí)委托。以下我將展示一個(gè)從雙向簡(jiǎn)單委托到臨時(shí)委托的演變過程。當(dāng)然,我會(huì)以雇主和保姆的例子來說明它。因?yàn)闃?gòu)造
    class Element{
        Visitor v;
        setVisitor(Visitor v){
            this.v = v;
        }
        accept(){
            v.visit();
        }
    }
    class Visitor{
        Element e;
        setElement(Element e){
            this.e = e;
        }
        visit(){
            訪問e的過程。    
        }
    }
    void main(){
        Element e = new Element();          
        Visitor v = new Visitor();
        e.setVisitor(v);    //建立雙向委托關(guān)系
        v.setElement(e);
        e.accept();
    }
    對(duì)于這段代碼,我想說明幾點(diǎn):
    Element: 表示雇主。
    Visitor:表示保姆。
    accept:表示雇主讓保姆掃地的要求。//至少,掃地是我沿用一開始的感覺,其實(shí),這個(gè)形象的描述是我一個(gè)好朋友想的,在此表示感謝。當(dāng)時(shí),我問他有沒好例子來描述我給他講的想法。
    visit: 表示保姆掃地過程,當(dāng)然他需要雇主的掃把和其他一些東西
    OK,到現(xiàn)在為止,這代碼能正常工作了,他解決了雇主雇用保姆掃地的問題。
    讓我們理清下邏輯,先是來了一個(gè)雇主和一個(gè)保姆,然后,雇主要了保姆的資料,同時(shí)保姆也要了雇主的資料,這種勞動(dòng)關(guān)系就這么建立了,當(dāng)雇主要求掃地時(shí)即e.accept(),他委托他持有的保姆來干活,而保姆visit(),他無任何參數(shù),因?yàn)樗渤钟泄椭髁恕H欢D泛軕?-你見過保姆很勤快的嗎?他告訴雇主,我不想記那么多,你叫掃地時(shí),把你的信息一起攜帶給我。為什么呢?因?yàn)楸D匪蚕攵噘嶅X,這樣方式,他可以為多個(gè)雇主服務(wù),得到可觀的收入。
    于是,出現(xiàn)了下面的改寫。
    class Element{
        Visitor v;
        Element(Visitor v){
            this.v = v;
        }
        accept(){
            v.visit(this);
        }
    }
    class Visitor{
        visit(Element e){
            訪問e的過程。    
        }
    }
    void main(){
        Visitor v = new Visitor();
        Element e = new Element(v);          
        e.accept();
    }
    這些新代碼,意味著保姆有了新的工作方式,他可以為多個(gè)雇主工作,而雇主呢?看到委托了,哦,他只能雇傭一個(gè)保姆。你覺得這樣如何,我想說的是,如果你想長(zhǎng)期雇傭這個(gè)保姆,OK,它可以很好的為你工作。
    這種方式,一直工作的好好的,保姆很勤勞,雇主也很友善。但是,你可曾想過,哪一天,只要關(guān)系中的任何一方翻臉,這將是一大災(zāi)爛,雙方糾纏不清。所以,雇主有了經(jīng)驗(yàn),他不想在第二關(guān)卡結(jié)束游戲,所以,他決定找一個(gè)臨時(shí)工。更具體的說,他想需要掃地時(shí)才去請(qǐng)保姆(但是,他有可能一時(shí)半會(huì)找不到,這個(gè)不管他),于是,他把保姆的委托也丟掉了,他不再只讓固定保姆做事了。OK,他把委托提到參數(shù)的位置去了。
    class Element{
        accept(Visitor v){
            v.visit(this);
        }
    }
    class Visitor{
        visit(Element e){
            訪問e的過程。    
        }
    }
    void main(){
        Visitor v = new Visitor();
        Element e = new Element();          
        e.accept(v);
    }
    這樣的結(jié)果,雇主可以請(qǐng)臨時(shí)保姆干活,保姆也可以為多個(gè)雇主服務(wù),很滿意,我們稍微修改成下面。
    class Element1{
        accept(Visitor v){
            v.visit(this);
        }
    }
    class Visitor{
        visit(Element e){
            訪問雇主e的過程。    
        }
        visit(Element1 e1){        訪問雇主e的過程。    
        }
    }
    OK,這樣的結(jié)果,不會(huì)變了嗎?當(dāng)然,我們會(huì)盡量保持住,代碼寫了可不能亂動(dòng)。但是,有一天,城市里又來了新雇主Element2,保姆為了能為他服務(wù),怎么辦,添加visit(Element2 e2)?我建議別這么做,為什么?你違反了游戲規(guī)則(OCP),但是,他對(duì)于固定數(shù)據(jù)結(jié)構(gòu)的具體訪問非常有用,如果,他很好的幫助你解決問題,那就用它吧。這個(gè)例子,引出了臨時(shí)委托的概念,那什么時(shí)候,會(huì)使用它呢?我想說的是,如果委托者要做的事很多,且都是交給被委托者,也就是,委托者與被委托者的交付是頻繁的,那么我建議,你保持住這個(gè)長(zhǎng)期工(對(duì)象變量),除此之外,你會(huì)很喜歡找臨時(shí)工的。這個(gè)臨時(shí)是參數(shù)的形式出現(xiàn)在的。所以,所有委托方式的模式,都可以使用臨時(shí)委托來實(shí)現(xiàn)。那為什么那么模式都保持了被委托者呢?我說了。這也提示了一點(diǎn),所謂設(shè)計(jì)模式,不是一成不變的,是隨著具體需要而發(fā)展的。也許,你哪天使用的就是某種設(shè)計(jì)模式的變形。理解本質(zhì),核心的東西,那就讓它72變吧。它逃不了的。
    也許休息的時(shí)間到了,我會(huì)盡量再接下來的幾天內(nèi),把這東西寫完成的.....
    待續(xù)......
    posted on 2008-08-13 16:56 zhqh 閱讀(157) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

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


    網(wǎng)站導(dǎo)航:
     

    aaaaaaaaaaaaaaaaaaaaaa

    主站蜘蛛池模板: 亚洲AV无码之国产精品| 韩国免费A级毛片久久| 国产91在线免费| aa毛片免费全部播放完整| 久久久亚洲欧洲日产国码农村| 国产精品永久免费10000| 亚洲精品女同中文字幕| 中文字幕精品亚洲无线码二区| 99re免费99re在线视频手机版| 97久久国产亚洲精品超碰热| 又粗又硬又黄又爽的免费视频| 中文字幕乱码系列免费| 亚洲午夜久久久精品电影院| 四虎成人免费网站在线| 在线观看人成视频免费无遮挡| ww亚洲ww在线观看国产| 国产成人高清亚洲| 亚洲精品在线免费看| 一级做a爰片久久免费| 亚洲国产成人91精品| 亚洲欧洲精品成人久久奇米网 | 亚洲中文字幕第一页在线| 100000免费啪啪18免进| 无遮挡国产高潮视频免费观看 | 亚洲四虎永久在线播放| 国产又黄又爽又刺激的免费网址| 久操视频免费观看| 香港经典a毛片免费观看看| 亚洲制服丝袜在线播放| 亚洲午夜福利717| 日韩视频在线免费观看| 一区二区三区观看免费中文视频在线播放| 丰满亚洲大尺度无码无码专线| 亚洲最大成人网色| 亚洲综合AV在线在线播放| 日韩人妻无码免费视频一区二区三区| 日本人成在线视频免费播放| 日本黄页网址在线看免费不卡| 亚洲fuli在线观看| 亚洲一区免费观看| 亚洲精品高清国产一线久久|