锘??xml version="1.0" encoding="utf-8" standalone="yes"?>丁香婷婷亚洲六月综合色,国产偷国产偷亚洲高清日韩,亚洲AV成人无码网站http://www.tkk7.com/persister/category/26173.htmlzh-cnFri, 17 Sep 2010 10:14:55 GMTFri, 17 Sep 2010 10:14:55 GMT60澶氱嚎紼嬭璁℃ā寮忔葷粨http://www.tkk7.com/persister/archive/2010/01/31/311388.htmlpersisterpersisterSun, 31 Jan 2010 07:26:00 GMThttp://www.tkk7.com/persister/archive/2010/01/31/311388.htmlhttp://www.tkk7.com/persister/comments/311388.htmlhttp://www.tkk7.com/persister/archive/2010/01/31/311388.html#Feedback0http://www.tkk7.com/persister/comments/commentRss/311388.htmlhttp://www.tkk7.com/persister/services/trackbacks/311388.html 1.Single Threaded Execution Pattern 澶氫釜綰跨▼鍏變韓涓涓疄渚嬶紝榪欐牱鐨勮瘽錛屽涓嚎紼嬮兘
  鎿呰嚜鏀瑰姩瀹炰緥鐨勭姸鎬侊紝瀹炰緥浼氫撫澶卞畨鍏ㄦс傝繖縐嶆儏鍐靛彲浠ラ氳繃Java鐨勫叧閿瘝synchronized鏉ヨВ鍐熾傚澶氫釜浜?br />   閫氳繃涓涓猤ate鏃訛紝鍙兘涓涓釜閫氳繃錛岄偅涔堝彲浠ュ涓嬬殑鏂瑰紡錛?br />   public synchronized void pass(String name){
    this.name = name;
  }
  synchronized鏂規硶鐨勬ц兘姣旀櫘閫氱殑鏂規硶浣庯紝鎵浠ラ檷浣庡噺灝戜嬌鐢ㄣ?br />   JDK涓緢澶氭柟娉曟槸synchronized錛屽彲浠ュ畨鍏ㄤ嬌鐢紝寰堝涓轟簡鎬ц兘鏄病鏈夊悓姝ャ備負浜嗘彁楂樻ц兘鍙互鑰冭檻浣跨敤  Immutable Pattern
2.Immutable Pattern 澶氫釜綰跨▼鍏變韓涓涓疄渚嬶紝浣嗘槸瀹炰緥鐨勭姸鎬佷笉浼氭敼鍙橈紝鍙互鎻愪緵throughput錛屼絾蹇呴』淇濊瘉
  涓嶅彉褰紙瀹炰緥鐨勭姸鎬佷笉浼氭敼鍙橈級銆傞渶瑕佷嬌鐢╬rivate錛宖inal絳夋潵鏀寔銆?br /> 3.Guarded Suspension Pattern 澶氫釜綰跨▼鍏變韓涓涓疄渚嬶紝榪欐牱鐨勮瘽錛屽涓嚎紼嬮兘
  鎿呰嚜鏀瑰姩瀹炰緥鐨勭姸鎬侊紝瀹炰緥浼氫撫澶卞畨鍏ㄦс傚綋瀹炰緥鐨勭姸鎬佷笉鎭板綋鏃訛紝灝辮姹傜嚎紼嬬瓑寰呭埌鍚堥傜殑鐘舵侊紝浠?#8220;璀︽垝鏉?nbsp;  浠?#8221;鏉ヨ〃紺哄疄渚嬬殑“閫傚綋鐨勭姸鎬?#8221;銆傚鏋滆鎴掓潯浠朵竴鐩翠笉鎴愮珛錛岀嚎紼嬩細姘歌繙絳夊緟涓嬪幓錛屼細浣跨▼搴忎撫澶辯敓鍛芥с侸ava   涓敤while寰幆鏉ユ祴璇曡鎴掓潯浠訛紝浣跨敤wait鏂規硶璁╃嚎紼嬬瓑寰咃紝騫朵嬌鐢╪otify/notifyAll閫氱煡璀︽垝鏉′歡鐨勬敼鍙樸?br /> 媯   楠屻佷慨鏀硅鎴掓潯浠舵槸錛屼細浣跨敤Single Threaded Execution Pattern銆侾attern鐨勪緥瀛愬涓嬶細
  public class RequestQueue{

      private final LinkedList queue = new LinkedList();
      public synchronized Request getRequest(){
    while(queue.size() <= 0){   //璀︽垝鏉′歡
         try{    
        wait();
          }catch(InterruptedException e){}
    }
    return (Request)queue.removeFirst();
      }
      public synchronized void putRequest(Request request){
        queue.addLast(request);
        notifyAll();

      }

  }


  浠ヤ笂浣跨敤Queue鐨勫鎴風鍜屾湇鍔″櫒浠g爜閲岄潰闈炲父騫插噣錛屾病鏈夊綰跨▼鐨勪笢瑗匡紝浠g爜澶嶇敤鎬у緢濂姐?br />   褰撹鎴掓潯浠朵笉鎴愮珛鏃舵兂瑕侀┈涓婇鍑猴紝灝變嬌鐢˙alking Pattern
4.Balking Pattern 涓鐩寸瓑寰呭畨鍏ㄧ殑鏃舵満錛屼細浣跨▼搴忕殑鍝嶅簲鎬ч檷浣庛侸ava璇█涓紝媯楠岃鎴掓潯浠舵椂瑕佷嬌鐢╥f璇彞
  錛屽綋瑕乥alk鏃訛紝鍙嬌鐢╮eturn閫鍑烘柟娉曪紝鎴栬卼hrow鎶涘嚭寮傚父銆?br />   public class Data {
    private String filename;    //淇敼鏄殑鍚嶅瓧顨?br />     private String content;     // 璧勬枡鐨勫唴瀹?br />     private boolean changed;    //淇敼鍚庣殑鍐呭榪樻病瀛樺偍鐨勮瘽錛屽間負true

    public Data(String filename, String content) {
        this.filename = filename;
        this.content = content;
        this.changed = true;
    }

    // 淇敼璧勬枡鍐呭
    public synchronized void change(String newContent) {        
        content = newContent;                                   
        changed = true;                                           
    }                                                           

    // 鑻ユ湁璧勬枡淇敼錛屽氨瀛樺偍鍒版尅瀹夐噷
    public synchronized void save() throws IOException {      
        if (!changed) {                                           
            System.out.println(Thread.currentThread().getName() + " balks");
            return; //娌℃湁灝遍鍑?nbsp;                                            
        }                                                       
        doSave();                                             
        changed = false;                                          
    }                                                           

    // 瀹為檯璧勬枡鍌ㄥ瓨鍒版尅妗堥噷鐢ㄧ殑鏂規硶
    private void doSave() throws IOException {
        System.out.println(Thread.currentThread().getName() + " calls doSave, content = " + content);
        Writer writer = new FileWriter(filename);
        writer.write(content);
        writer.close();
    }
}

5.Producer-Consumer Pattern 褰揚roducer鍙備笌鑰呬笌Consumer鍙備笌鑰呭鐞嗙殑閫熷害涓嶅悓鏃訛紝閫熷害鎱㈢殑浼氭壇閫熷害蹇殑
  鍚庤吙錛岃岄檷浣庣▼搴忕殑throughput銆傝В鍐崇殑鍔炴硶灝辨槸鍦ㄤ袱鑰呬箣闂達紝鍔犱笂涓戶鐢ㄧ殑Channel鍙備笌鑰呫傚茍璁〤hannel
  鍙備笌鑰呭瓨鏀懼鏉℃暟鎹紝榪欐牱灝卞彲浠ョ紦鍐睵roducer鍜孋onsumer涔嬮棿澶勭悊閫熷害鐨勫樊寮傘傝繖涓ā寮忎嬌鐢ㄤ簡Guarded
  Suspension Pattern銆?br />
  public class Table {
    private final String[] buffer;
    private int tail;  /涓嬩竴涓斁put鐨勫湴鏂?
    private int head;  //涓嬩竴涓斁鐨則ake鍦版柟
    private int count; // buffer鍐呯殑铔嬬硶鏁?br />     public Table(int count) {
        this.buffer = new String[count];
        this.head = 0;
        this.tail = 0;
        this.count = 0;
    }
    // 鏀劇疆铔嬬硶
    public synchronized void put(String cake) throws InterruptedException {
        System.out.println(Thread.currentThread().getName() + " puts " + cake);
        while (count >= buffer.length) {
            wait();
        }
        buffer[tail] = cake;
        tail = (tail + 1) % buffer.length;
        count++;
        notifyAll();
    }
    // 顭濆彇寰楄泲緋?br />     public synchronized String take() throws InterruptedException {
        while (count <= 0) {
            wait();
        }
        String cake = buffer[head];
        head = (head + 1) % buffer.length;
        count--;
        notifyAll();
        System.out.println(Thread.currentThread().getName() + " takes " + cake);
        return cake;
    }
  }

6.Read-Write Lock Pattern 澶氫釜綰跨▼鍏變韓涓涓疄渚嬶紝濡傝繘紼嬩箣闂翠笉榪涜鍏變韓鑳℃壇錛屼細涓уけ瀹夊叏鎬с?br />   浣嗕嬌鐢⊿ingle Threaded Execution Pattern浼氫嬌紼嬪簭throughput闄嶄綆銆傝В鍐崇殑鏂規硶灝辨槸灝嗘帶鍒秗eader鍙備笌鑰呯殑    閿佸畾涓庢帶鍒秝riter鍙備笌鑰呯殑閿佸畾鍒嗗紑錛屽姞鍏eadWriteLock鍙備笌鑰咃紝浠ユ彁渚涗袱縐嶄笉鍚岀殑閿佸畾銆?br />  
 public final class ReadWriteLock {
    private int readingReaders = 0; // (A)...瀹為檯姝e湪璇誨彇鐨勬墽琛岀華鏁伴噺
    private int waitingWriters = 0; // (B)...姝e湪絳夊緟鍐欏叆鐨勬墽琛岀華鏁伴噺
    private int writingWriters = 0; // (C)...瀹為檯姝e湪鍐欏叆鐨勬墽琛岀華鏁伴噺
    private boolean preferWriter = true; // 鍐欏叆浼樺厛鐨勮瘽錛屽間負true

    public synchronized void readLock() throws InterruptedException {
        while (writingWriters > 0 || (preferWriter && waitingWriters > 0)) {
            wait();
        }
        readingReaders++;                       //  (A)瀹為檯姝e湪璇誨彇鐨勭嚎紼嬫暟閲忓姞1
    }

    public synchronized void readUnlock() {
        readingReaders--;                       //  (A)瀹為檯姝e湪璇誨彇鐨勭嚎紼嬫暟閲忓噺1
        preferWriter = true;
        notifyAll();
    }

    public synchronized void writeLock() throws InterruptedException {
        waitingWriters++;                       // (B)姝e湪絳夊緟鍐欏叆鐨勭嚎紼嬫暟閲忓姞1
        try {
            while (readingReaders > 0 || writingWriters > 0) {
                wait();
            }
        } finally {1
          waitingWriters--;                   // (B)姝e湪絳夊緟鍐欏叆鐨勭嚎紼嬫暟閲忓噺1
        }
        writingWriters++;                       //  (C)瀹為檯姝e湪鍐欏叆鐨勭嚎紼嬫暟閲忓姞1
    }

    public synchronized void writeUnlock() {
        writingWriters--;                       // (C)瀹為檯姝e湪鍐欏叆鐨勭嚎紼嬫暟閲忓噺
        preferWriter = false;
        notifyAll();
    }
  }
 
  public class Data {
    private final char[] buffer;
    private final ReadWriteLock lock = new ReadWriteLock();
    public Data(int size) {
        this.buffer = new char[size];
        for (int i = 0; i < buffer.length; i++) {
            buffer[i] = '*';
        }
    }
    public char[] read() throws InterruptedException {
        lock.readLock();
        try {
            return doRead();
        } finally {
            lock.readUnlock();
        }
    }
    public void write(char c) throws InterruptedException {
        lock.writeLock();
        try {
            doWrite(c);
        } finally {
            lock.writeUnlock();
        }
    }
    private char[] doRead() {
        char[] newbuf = new char[buffer.length];
        for (int i = 0; i < buffer.length; i++) {
            newbuf[i] = buffer[i];
        }
        slowly();
        return newbuf;
    }
    private void doWrite(char c) {
        for (int i = 0; i < buffer.length; i++) {
            buffer[i] = c;
            slowly();
        }
    }
    private void slowly() {
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
        }
    }
  }

7.Thread-Per-Message Pattern  鍦ㄦ柟娉曠殑灞炴у鐞嗗畬鎴愪箣鍓嶏紝鎺у埗鏉冧笉浼氫粠Host鍙備笌鑰呴鍑恒傚鏋滄柟娉曠殑澶勭悊
  灞炴у緢璇濊垂鏃墮棿錛岀▼搴忕殑鍝嶅簲鎬ц兘浼氶檷浣庛傝В鍐崇殑鏂瑰紡灝卞湪Host鐨勫弬涓庤呴噷錛屽惎鍔ㄦ柊鐨勭嚎紼嬶紝騫朵笖灝嗚鏂規硶搴?nbsp;   璇ヨ繘琛岀殑宸ヤ綔浜ょ粰榪欎釜蹇冪殑綰跨▼錛岃繖鏍稢lient鍙備笌鑰呯殑綰跨▼鍙互緇х畫鎵ц涓嬩竴涓搷浣滐紝榪欐牱鍋氾紝涓嶇敤鏇存敼    Client鍙備笌鑰呯殑紼嬪簭浠g爜錛屽茍鑳芥彁楂樼▼搴忕殑鍝嶅簲鎬с傛兂鑺傜渷鍚姩綰跨▼鎵鑺辮垂鐨勬椂闂達紝鍙互浣跨敤Worker Thread    Pattern銆?br />   public class Host {
    private final Helper helper = new Helper();
    public void request(final int count, final char c) {
        System.out.println("    request(" + count + ", " + c + ") BEGIN");
        new Thread() {
            public void run() {
                helper.handle(count, c);
            }
        }.start();
        System.out.println("    request(" + count + ", " + c + ") END");
    }
  }

8.Worker Thread Pattern 濡傛灉鏂規硶鐨勫鐞嗗睘鎬у緢鑺辨椂闂達紝紼嬪簭鐨勫搷搴旀т細闄嶄綆銆備負浜嗘彁渚涘搷搴旀э紝鑰屽惎鍔ㄦ柊
  鐨勭嚎紼嬫潵澶勭悊鏂規硶鏃訛紝鍚姩綰跨▼鎵鑺辯殑鏃墮棿鍙堜細闄嶄綆throughput銆傚彟澶栧綋閫佸嚭鐨勮姹傚お澶氭椂錛屼細鍚姩
  榪囧鐨勭嚎紼嬶紝榪欎細浣挎壙杞介噺鍙樺樊銆?br />   public class Channel {
    private static final int MAX_REQUEST = 100;
    private final Request[] requestQueue;
    private int tail;  // 顥活棪涓嬩竴涓猵utRequest鐨勫湴鏂?br />     private int head;  // 顥活棪涓嬩竴涓猼akeRequest鐨勫湴鏂?br />     private int count; // Request鐨勬暟閲?br />
    private final WorkerThread[] threadPool;

    public Channel(int threads) {
        this.requestQueue = new Request[MAX_REQUEST];
        this.head = 0;
        this.tail = 0;
        this.count = 0;

        threadPool = new WorkerThread[threads];
        for (int i = 0; i < threadPool.length; i++) {
            threadPool[i] = new WorkerThread("Worker-" + i, this);
        }
    }
    public void startWorkers() {
        for (int i = 0; i < threadPool.length; i++) {
            threadPool[i].start();
        }
    }
    public synchronized void putRequest(Request request) {
        while (count >= requestQueue.length) {
            try {
                wait();
            } catch (InterruptedException e) {
            }
        }
        requestQueue[tail] = request;
        tail = (tail + 1) % requestQueue.length;
        count++;
        notifyAll();
    }
    public synchronized Request takeRequest() {
        while (count <= 0) {
            try {
                wait();
            } catch (InterruptedException e) {
            }
        }
        Request request = requestQueue[head];
        head = (head + 1) % requestQueue.length;
        count--;
        notifyAll();
        return request;
    }
  }

9.Future Pattern 褰揅lient浼氬皢宸ヤ綔濮旀墭緇欏叾浠栫嚎紼嬶紝鑰孋lient鍙備笌鑰呭笇鏈涘緱鍒板鐞嗙殑緇撴灉銆傚皢宸ヤ綔濮旀墭緇?br />   鍒漢鏃訛紝濡傛灉鍙堢瓑寰呮墽琛岀粨鏋滐紝浼氫嬌鍝嶅簲鎬ч檷浣庛?br />   public class FutureData implements Data {
    private RealData realdata = null;
    private boolean ready = false;
    public synchronized void setRealData(RealData realdata) {
        if (ready) {                        
            return;     // balk
        }
        this.realdata = realdata;
        this.ready = true;
        notifyAll();
    }
    public synchronized String getContent() {
        while (!ready) {
            try {
                wait();
            } catch (InterruptedException e) {
            }
        }
        return realdata.getContent();
    }
  }


闄勫綰跨▼紼嬪簭鐨勮瘎浠鋒爣鍑?br /> 1銆佸畨鍏ㄦр斺斾笉鎹熷潖瀵硅薄 瀵硅薄鎹熷潖鏄寚瀵硅薄鐨勭姸鎬佷笉絎﹀悎璁捐甯堢殑鍘熸剰錛岄氬父鏄幏鍙栧璞$殑鐘舵佸煎茍闈為鏈熷箋?br /> 2銆佺敓瀛樻р斺旇繘琛屽繀瑕佺殑澶勭悊 涔熻涓嶆槸鐜板湪錛屼絾鏄竴瀹氫細榪涜蹇呰鐨勫鐞嗭紝濡傛灉紼嬪簭瀹夊叏浜嗭紝浣嗘槸鏈変簺蹇呰鐨勫鐞嗗緱涓嶅埌鎿嶄綔錛岄偅涔堣繖涓綰跨▼紼嬪簭涔熸槸涓嶅悎鏍肩殑銆?br /> 3銆佸鐢ㄦр斺斿彲鍐嶅埄鐢ㄧ被 鍐欏綰跨▼紼嬪簭錛屽鏋滆兘澶熷皢澶氱嚎紼嬬殑鍏變韓鍜屼簰鏂ョ粨鏋勯殣钘忓湪綾婚噷闈紝榪欏氨鏄竴涓珮搴﹀彲澶嶅嵃鐨勭▼搴忋?br /> 4銆佹ц兘鈥斺旇兘蹇熷ぇ閲忓鐞?涓昏琛ㄧ幇鍦ㄥ悶鍚愰噺錛圱hroughput錛夊嵆涓瀹氭椂闂村唴鑳藉畬鎴愮殑澶勭悊閲忥紝鑳藉畬鎴愮殑澶勭悊閲忚秺澶氾紝琛ㄧず鏁版嵁鍚炲悙閲忚秺澶э紱瀹歸噺錛圕apacity錛夋寚鍙悓鏃跺鐞嗙殑鏁伴噺錛涘搷搴旀э紙Responsiveness錛夋寚浠庡彂鍑鴻姹傚埌鏀跺埌鍝嶅簲鐨勬椂闂達紝鏃墮棿瓚婄煭錛屽搷搴旀ц秺楂樸?br /> 5銆佷幾緙╂э紙Scalability錛夌瓑

鍓嶄袱涓槸蹇呰鏉′歡錛屽悗闈㈠嚑涓槸紼嬪簭璐ㄩ噺鐨勬弿榪?br />

persister 2010-01-31 15:26 鍙戣〃璇勮
]]>
java澶氱嚎紼嬭璁℃ā寮?wait/notify鏈哄埗http://www.tkk7.com/persister/archive/2009/12/03/304620.htmlpersisterpersisterThu, 03 Dec 2009 06:45:00 GMThttp://www.tkk7.com/persister/archive/2009/12/03/304620.htmlhttp://www.tkk7.com/persister/comments/304620.htmlhttp://www.tkk7.com/persister/archive/2009/12/03/304620.html#Feedback0http://www.tkk7.com/persister/comments/commentRss/304620.htmlhttp://www.tkk7.com/persister/services/trackbacks/304620.html 濡傛灉鍥劇墖榪樻病鏈変笅杞藉畬錛宒isplayThread鑳芥殏鍋滐紝褰揹ownloadThread瀹屾垚浜嗕換鍔? 鍚庯紝鍐嶉氱煡displayThread“鍥劇墖鍑嗗瀹屾瘯錛岃兘鏄劇ず浜?#8221;錛岃繖鏃訛紝displayThread緇х畫鎵ц銆傘銆
浠ヤ笂閫昏緫綆鍗曠殑璇村氨鏄細濡傛灉鏉′歡涓嶆弧瓚籌紝鍒欑瓑寰呫?br /> 褰撴潯浠舵弧瓚蟲椂錛岀瓑寰呰鏉′歡鐨勭嚎紼嬪皢琚敜閱掋?br /> 鍦↗ava涓紝榪欎釜鏈哄埗鐨勫疄鐜頒緷璧栦簬wait/notify銆傜瓑寰呮満鍒跺拰閿佹満鍒舵槸瀵嗗垏鍏寵仈鐨勩?br /> 渚嬪錛氥銆


1 synchronized(obj)
2 {銆銆
3     while(!condition)
4 {
5 銆銆obj.wait();銆銆
6 
7 }銆銆
8     obj.doSomething();銆銆
9 }銆
褰撶嚎紼婣鑾峰緱浜唎bj閿佸悗錛屽彂鐜版潯浠禼ondition涓嶆弧瓚籌紝鏃犳硶緇х畫涓嬩竴澶勭悊錛屼簬鏄嚎紼婣灝眞ait()銆傘銆鍦ㄥ彟涓綰跨▼B涓紝濡傛灉B鏇存敼浜嗘煇浜涙潯浠訛紝浣垮緱綰跨▼A鐨刢ondition鏉′歡婊¤凍浜嗭紝灝辮兘鍞ら啋綰跨▼A錛?br />
1 synchronized(obj)
2 {銆銆
3     condition = true;銆銆
4     obj.notify();銆銆
5 }銆


闇瑕佹敞鎰忕殑姒傚康鏄細銆銆
# 璋冪敤obj鐨剋ait(), notify()鏂規硶鍓嶏紝蹇呴』鑾峰緱obj閿侊紝涔熷氨鏄繀欏誨啓鍦╯ynchronized(obj) {...} 浠g爜孌靛唴銆傘銆

# 璋冪敤obj.wait()鍚庯紝綰跨▼A灝遍噴鏀句簡obj鐨勯攣錛屽惁鍒欑嚎紼婤鏃犳硶鑾峰緱obj閿侊紝涔熷氨鏃犳硶鍦╯ynchronized(obj) {...} 浠g爜孌靛唴鍞ら啋A銆傘銆

# 褰搊bj.wait()鏂規硶榪斿洖鍚庯紝綰跨▼A闇瑕佸啀嬈¤幏寰梠bj閿侊紝鎵嶈兘緇х畫鎵ц銆傘銆
# 濡傛灉A1,A2,A3閮藉湪obj.wait()錛屽垯B璋冪敤obj.notify()鍙兘鍞ら啋A1,A2,A3涓殑涓涓紙鍏蜂綋鍝竴涓敱JVM鍐沖畾錛夈傘銆
# obj.notifyAll()鍒欒兘鍏ㄩ儴鍞ら啋A1,A2,A3錛屼笉榪囪緇х畫鎵цobj.wait()鐨勪笅涓鏉¤鍙ワ紝蹇呴』鑾峰緱obj閿侊紝鍥犳錛孉1,A2,A3鍙湁涓涓湁鏈轟細鑾峰緱閿佺戶緇墽琛岋紝渚嬪A1錛屽叾浣欑殑闇瑕佺瓑寰匒1閲婃斁obj閿佷箣鍚庢墠鑳界戶緇墽琛屻傘銆
# 褰揃璋冪敤obj.notify/notifyAll鐨勬椂鍊欙紝B姝f寔鏈塷bj閿侊紝鍥犳錛孉1,A2,A3铏借鍞ら啋錛屼笉榪囦粛鏃犳硶鑾峰緱obj閿併傜洿鍒癇閫鍑簊ynchronized鍧楋紝閲婃斁obj閿佸悗錛孉1,A2,A3涓殑涓涓墠鏈夋満浼氳幏寰楅攣緇х畫鎵ц銆?

persister 2009-12-03 14:45 鍙戣〃璇勮
]]>
Visitor璁捐妯″紡鐨勭悊瑙?/title><link>http://www.tkk7.com/persister/archive/2007/07/31/133534.html</link><dc:creator>persister</dc:creator><author>persister</author><pubDate>Tue, 31 Jul 2007 03:32:00 GMT</pubDate><guid>http://www.tkk7.com/persister/archive/2007/07/31/133534.html</guid><wfw:comment>http://www.tkk7.com/persister/comments/133534.html</wfw:comment><comments>http://www.tkk7.com/persister/archive/2007/07/31/133534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/persister/comments/commentRss/133534.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/persister/services/trackbacks/133534.html</trackback:ping><description><![CDATA[Visitor妯″紡錛屽湪涓嶄慨鏀瑰凡鏈夌▼搴忕粨鏋勭殑鍓嶆彁涓嬶紝閫氳繃娣誨姞棰濆鐨?#8220;璁塊棶鑰?#8221;鏉ュ畬鎴愬宸叉湁浠g爜鍔熻兘鐨勬彁鍗囥?br /> Visitor妯″紡鍖呮嫭浠ヤ笅鍑犱釜鍏冪礌錛?br /> <br /> 1) 璁塊棶鑰呮帴鍙o紙Visitor錛夛細澹版槑涓涓闂帴鍙o紝瀹氫箟visit鎺ュ彛錛屾湁鍑犱釜鍏冪礌灝卞畾涔夊嚑涓帴鍙f柟娉曘傛帴鍙f柟娉曠殑鍙傛暟鏍囪瘑浜嗗叿浣撹闂厓绱犺鑹詫紝涔熷氨鏄鍙傛暟鏄竴涓叿浣撶被銆傝繖涓湴鏂逛篃鏄疺isitor鐨勪笉瓚籌紝<br /> <br /> 2) 鍏蜂綋璁塊棶鑰咃紙Concrete Visitor錛夛細瀹炵幇Visitor鎺ュ彛 <br /> <br /> 3) 鍏冪礌鎺ュ彛錛圗lement錛夛細瀹氫箟涓涓猘ccept鏂規硶錛屽畠浠ヨ闂呮帴鍙d負鍙傛暟錛岃繖閲屼笉鏄叿浣撶殑璁塊棶鑰咃紝鍗充笉鐭ラ亾鍏蜂綋鐨勮闂呫?br /> <br /> 4) 鍏蜂綋鍏冪礌錛圕oncrete Element錛夛細瀹炵幇鍏冪礌錛圗lement錛夋帴鍙d腑accept鏂規硶錛屾帶鍒惰闂殑嫻佺▼銆?br /> <br /> 5) 瀵硅薄緇撴瀯錛圤bject Structure錛夛細榪欐槸浣跨敤Visitor妯″紡蹇呴』鐨勮鑹層傚畠瑕佸叿澶囦互涓嬬壒寰侊細鑳芥灇涓懼畠鐨勫厓绱狅紱鍙互鎻愪緵涓涓珮灞傜殑鎺ュ彛鍏佽璁塊棶鑰呰闂畠鐨勫厓绱狅紱鍙互鏄竴涓泦鍚堬紝濡備竴涓垪琛ㄦ垨涓涓棤搴忛泦鍚堛?br /> <br /> 綾誨浘濡備笅錛?br /> <img alt="" src="http://www.tkk7.com/images/blogjava_net/persister/9du0ok8rj791.jpg" width="555" height="344" /><br /> <br /> 鍏蜂綋浠g爜錛?br /> <br /> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> Visitor<br /> {<br />  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> visitCollection(Collection collection);<br />  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> visitString(String string);<br />  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> visitFloat(Float </span><span style="color: #0000ff;">float</span><span style="color: #000000;">);<br /> }</span></div> <br /> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> ConcreteVisitor1 </span><span style="color: #0000ff;">implements</span><span style="color: #000000;"> Visitor<br /> {<br />  </span><span style="color: #008000;">//</span><span style="color: #008000;">鍦ㄦ湰鏂規硶涓紝鎴戜滑瀹炵幇浜嗗Collection鐨勫厓绱犵殑鎴愬姛璁塊棶</span><span style="color: #008000;"><br /> </span><span style="color: #000000;">銆銆 </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> visitCollection(Collection collection) {<br />  銆銆 Iterator iterator </span><span style="color: #000000;">=</span><span style="color: #000000;"> collection.iterator()<br />  銆銆 </span><span style="color: #0000ff;">while</span><span style="color: #000000;"> (iterator.hasNext()) {<br />  銆銆 銆銆 Object o </span><span style="color: #000000;">=</span><span style="color: #000000;"> iterator.next();<br />  銆銆 銆銆 </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (o </span><span style="color: #0000ff;">instanceof</span><span style="color: #000000;"> Visitable)<br />  銆銆 銆銆 銆銆 ((Visitable)o).accept(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">);<br />  銆銆 }<br /> <br />  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> visitString(String string) {<br />  銆銆 System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">'</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">string</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">'</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />  }<br /> <br />  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> visitFloat(Float </span><span style="color: #0000ff;">float</span><span style="color: #000000;">) {<br />  銆銆 System.out.println(</span><span style="color: #0000ff;">float</span><span style="color: #000000;">.toString()</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">f</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />  }<br /> } <br /> </span></div> <br /> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> Visitable<br /> {<br />  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> accept(Visitor visitor);<br /> } <br /> <br /> </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> StringElement </span><span style="color: #0000ff;">implements</span><span style="color: #000000;"> Visitable<br /> {<br />  </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String value;<br />  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> ConcreteElement(String string) {<br />  銆銆 value </span><span style="color: #000000;">=</span><span style="color: #000000;"> string;<br />  }<br />  </span><span style="color: #008000;">//</span><span style="color: #008000;">瀹氫箟accept鐨勫叿浣撳唴瀹?nbsp;榪欓噷鏄緢綆鍗曠殑涓鍙ヨ皟鐢?/span><span style="color: #008000;"><br /> </span><span style="color: #000000;">銆銆 </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> accept(Visitor visitor) {<br />  銆銆 visitor.visitString(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">);<br />  }<br /> }<br /> <br /> <br /> </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> FloatElement </span><span style="color: #0000ff;">implements</span><span style="color: #000000;"> Visitable<br /> {<br />  </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Float value;<br />  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> ConcreteElement(Float f) {<br />  銆銆 value </span><span style="color: #000000;">=</span><span style="color: #000000;"> f;<br />  }<br />  </span><span style="color: #008000;">//</span><span style="color: #008000;">瀹氫箟accept鐨勫叿浣撳唴瀹?nbsp;榪欓噷鏄緢綆鍗曠殑涓鍙ヨ皟鐢?/span><span style="color: #008000;"><br /> </span><span style="color: #000000;">銆銆 </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> accept(Visitor visitor) {<br />  銆銆 visitor.visitFloat(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">);<br />  }<br /> }</span></div> <br /> 鎬葷粨錛?br /> 1銆佸厓绱犳帴鍙e拰鍏冪礌綾婚兘鏄緷璧朧isitor鎺ュ彛錛岃屼笉鏄叿浣撳疄鐜扮被錛屽緢濂界殑瀹炵幇浜嗚В鑰︺傚鏋滄湁涓涓柊鐨勫厓绱犳榪嶸isitor鍙傝錛屽彧闇瑕佸疄鐜癡isitable鎺ュ彛錛屽茍瀹炵幇accept鏂規硶鍗沖彲錛岄兘涓嶇壍娑夊叿浣撶殑Visitor銆?br /> <br /> 2銆乂isitor鎺ュ彛鍒欎笉鐒訛紝瀹冧緷璧栧叿浣撶殑鍏冪礌錛屼篃灝辨槸璇村鏋滃厓绱犵殑綾誨瀷鍙戠敓鍙樺寲濡傚鍔犱竴涓厓绱犵被鍨嬶紝閭d箞Visitor鎺ュ彛鍜屽叿浣撳疄鐜扮被閮藉繀欏誨ぇ鏀癸紝榪欎釜鏄疺isitor妯″紡涓ラ噸鐨勭己闄楓?br /> <br /> 3銆乂isitor妯″紡鍚嶅壇鍏跺疄錛屽ソ姣旀梾琛岀ぞ銆佹父瀹㈠拰鏅偣鐨勫叧緋匯傛梾琛岀ぞ灝辨槸Visitor鎺ュ彛錛岃繖嬈¤礬綰塊兘闇瑕佸弬瑙傚摢浜涙櫙鐐歸氬父鏄浐瀹氱殑錛堟帴鍙e浐瀹氾紝濡傛灉瑕佹敼鍙樿紼嬶紝閫氬父寰堥夯鐑︼級錛涙父瀹㈠氨榪欎簺鏅偣錛屾梾琛岀ぞ緇欎綘瀹夋帓涓や釜灝忔椂,浣犳兂鑷繁鎬庝箞鐜╅兘琛岋紱鏅偣鍒欎互涓嶅彉搴斾竾鍙樸傝繖涓瘮濡備篃璁告湁浜涗笉鎭板綋錛屼笉榪囨湁鍔╀簬鐞嗚В榪欎釜妯″紡銆?br /> <br /> <img src ="http://www.tkk7.com/persister/aggbug/133534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/persister/" target="_blank">persister</a> 2007-07-31 11:32 <a href="http://www.tkk7.com/persister/archive/2007/07/31/133534.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://yw323.com" target="_blank">色婷五月综激情亚洲综合</a>| <a href="http://173ba.com" target="_blank">亚洲综合在线成人一区</a>| <a href="http://h588888.com" target="_blank">亚洲av成本人无码网站</a>| <a href="http://9v9av.com" target="_blank">永久久久免费浮力影院</a>| <a href="http://rp71.com" target="_blank">亚洲码和欧洲码一码二码三码</a>| <a href="http://155lh.com" target="_blank">一二三四在线播放免费观看中文版视频 </a>| <a href="http://x3013.com" target="_blank">在线观看亚洲免费</a>| <a href="http://yangguang882.com" target="_blank">日本免费电影一区</a>| <a href="http://yhanalati.com" target="_blank">国产偷国产偷亚洲高清在线 </a>| <a href="http://3y0r.com" target="_blank">久久精品视频免费播放</a>| <a href="http://hdznzdh.com" target="_blank">亚洲AV无码一区二区二三区软件 </a>| <a href="http://kwknc.com" target="_blank">成人毛片100免费观看</a>| <a href="http://sy8989.com" target="_blank">国产亚洲无线码一区二区</a>| <a href="http://wwwkk2347.com" target="_blank">久久国产乱子精品免费女</a>| <a href="http://caoliushequ9.com" target="_blank">国产AV无码专区亚洲AV男同</a>| <a href="http://wwwav888.com" target="_blank">香港a毛片免费观看</a>| <a href="http://0730jxpm.com" target="_blank">亚洲精品乱码久久久久久下载</a>| <a href="http://2002tw.com" target="_blank">亚洲黄色免费在线观看</a>| <a href="http://chch12.com" target="_blank">亚洲精品无码你懂的</a>| <a href="http://22youjizz.com" target="_blank">亚洲国产黄在线观看</a>| <a href="http://783944.com" target="_blank">久久国产精品免费专区</a>| <a href="http://222mp3.com" target="_blank">亚洲AV日韩综合一区尤物</a>| <a href="http://1897tao.com" target="_blank">亚洲av无码成人精品区在线播放</a>| <a href="http://3838dydy.com" target="_blank">国产视频精品免费视频</a>| <a href="http://1515m.com" target="_blank">亚洲系列国产精品制服丝袜第</a>| <a href="http://xxxck.com" target="_blank">免费看国产精品3a黄的视频</a>| <a href="http://ydysmedia.com" target="_blank">国产亚洲一卡2卡3卡4卡新区</a>| <a href="http://ttvv55.com" target="_blank">亚洲偷自拍拍综合网</a>| <a href="http://avqvod.com" target="_blank">污污网站免费观看</a>| <a href="http://rbthy.com" target="_blank">亚洲欧美日韩中文字幕一区二区三区</a>| <a href="http://cnepu.com" target="_blank">亚洲国产天堂久久综合</a>| <a href="http://diswooo.com" target="_blank">99久久99久久精品免费观看</a>| <a href="http://ding001.com" target="_blank">亚洲AV无码资源在线观看</a>| <a href="http://xwy2.com" target="_blank">国产V亚洲V天堂无码久久久 </a>| <a href="http://ztxfkj.com" target="_blank">免费大黄网站在线观看</a>| <a href="http://kyqp0022.com" target="_blank">福利免费在线观看</a>| <a href="http://yygcui.com" target="_blank">亚洲最大的黄色网</a>| <a href="http://mtripmall.com" target="_blank">亚洲精品色婷婷在线影院</a>| <a href="http://www998xe.com" target="_blank">亚洲人成免费电影</a>| <a href="http://0730jxpm.com" target="_blank">成人午夜影视全部免费看</a>| <a href="http://yy12345.com" target="_blank">亚洲色欲或者高潮影院</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>