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

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

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

         摘要: 設(shè)計模式之Proxy模式  閱讀全文

    posted @ 2007-12-06 13:19 flustar 閱讀(3525) | 評論 (0)編輯 收藏

         摘要: 設(shè)計模式之state模式  閱讀全文

    posted @ 2007-12-05 16:35 flustar 閱讀(1597) | 評論 (1)編輯 收藏

         摘要: 設(shè)計模式之Command模式  閱讀全文

    posted @ 2007-12-05 13:23 flustar 閱讀(1402) | 評論 (0)編輯 收藏

         摘要: 設(shè)計模式之Iterator模式  閱讀全文

    posted @ 2007-12-04 23:52 flustar 閱讀(3228) | 評論 (1)編輯 收藏

         摘要: 設(shè)計模式之Builder模式  閱讀全文

    posted @ 2007-12-03 21:39 flustar 閱讀(1227) | 評論 (0)編輯 收藏

         摘要: 設(shè)計模式之Prototype模式  閱讀全文

    posted @ 2007-12-02 16:16 flustar 閱讀(996) | 評論 (0)編輯 收藏

         摘要: 設(shè)計模式之Factory Method模式  閱讀全文

    posted @ 2007-11-29 17:41 flustar 閱讀(1706) | 評論 (0)編輯 收藏

     《設(shè)計模式》一書對Singleton模式是這樣描述的:
    保證一個類只有一個實例,并提供一個訪問它的全局訪問點。
    這個模式比較簡單,下面給出一個例子:
    public class Singleton {
      private static Singleton instance;
      private Singleton(){
      
      }
      public static Singleton getInstance(){
       if(instance==null)
        instance=new Singleton();
       return instance;
      }
    }
    這個程序在單線程下運行不會有問題,但是它不能運行在多線程的環(huán)境下,若想讓運行在多線程的環(huán)境下,必須修改如下:
    public class Singleton {
      private static class Instance{
       static final Singleton instance=new Singleton();
      }
      private Singleton(){
      
      }
      public static Singleton getInstance(){
       return Instance.instance;
      }
    }
    這樣做之所以可以,是因為靜態(tài)的內(nèi)部類Instance只會被裝載一次。運行在多線程下的單態(tài)設(shè)計模式也叫Double-Checked Looking模式。

    posted @ 2007-11-28 20:39 flustar 閱讀(703) | 評論 (1)編輯 收藏

     《設(shè)計模式》一書對Template Method模式是這樣描述的:
     定義一個操作中算法的骨架,而將一些步驟延遲到子類中。不改變算法的結(jié)構(gòu)而重新定義它的步驟。
     我的理解:定義一個抽象類或者說接口,在它的內(nèi)部定義一些抽象的方法(供TemplateMethod調(diào)用的步驟)和一個TemplateMethod方法(非抽象方法),封裝了這些抽象方法的接口或抽象類就是骨架。而將它的實現(xiàn)延遲到子類中,也就是用子類實現(xiàn)它。不改變算法的結(jié)構(gòu)而重新定義它的步驟,也就是改寫或者實現(xiàn)父類的這些非TemplateMethod的抽象方法。下面給出一個例子:
    abstract class QueryTemplate{
     public void doQuery(){  //Template Method
      formatConnect();
      formatSelect();
     }
      protected abstract void formatConnect();
      protected abstract void formatSelect();
    }
    class OracleQT extends QueryTemplate{
     public void formatConnect() {
      System.out.println("格式化Qracle數(shù)據(jù)庫連接");
     }
     public void formatSelect() {
      System.out.println("格式化Oracle數(shù)據(jù)庫查詢");
     }
    }
    class MysqlQT extends QueryTemplate{
     public void formatConnect() {
      System.out.println("格式化Mysql數(shù)據(jù)庫連接");
     }
     public void formatSelect() {
      System.out.println("格式化Mysql數(shù)據(jù)庫查詢");
     }
    }
    public class client {
     public static void main(String[] args) {
      QueryTemplate oracleQT=new OracleQT();
      oracleQT.doQuery();
      
      QueryTemplate mysqlQT=new MysqlQT();
      mysqlQT.doQuery();
     }
    }
    輸出結(jié)果:
    格式化Qracle數(shù)據(jù)庫連接
    格式化Oracle數(shù)據(jù)庫查詢
    格式化Mysql數(shù)據(jù)庫連接
    格式化Mysql數(shù)據(jù)庫查詢
    在這個例子中,我們定義了一個骨架QueryTemplate,在它的內(nèi)部定義了一個Template Method,和一些步驟(抽象方法),使用Template Method來調(diào)用這些步驟。步驟是在子類中實現(xiàn)的。
    小結(jié):有時候,會遇到由一系列步驟構(gòu)成的過程需要執(zhí)行。這個過程從高層次上看是相同的,但有些步驟的實現(xiàn)可能不同。正如,查詢SQL數(shù)據(jù)庫從高層次上看過程是相同的,但某些細節(jié)比如如何連接數(shù)據(jù)庫則可能因平臺等細節(jié)的不同而不同。通過Template Method模式,我們可以先定義步驟序列,然后覆蓋那些需要改變的步驟。

     

    posted @ 2007-11-28 20:36 flustar 閱讀(983) | 評論 (0)編輯 收藏

     《設(shè)計模式》一書對Observer是這樣描述的:
    定義對象間的一種一對多的依賴關(guān)系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都將得到通知并自動更新。
    舉個例子,在現(xiàn)實生活中,父母與孩子是最親密的人。父母做為孩子(被觀察者)的監(jiān)護人(觀察者),當孩子和別人打架后,一定會告訴他的父母這件事(呵呵,當孩子很小時,通常會告訴父母,長大了以后,可能不會,這里的孩子指的是小孩子),當孩子獲得獎學(xué)金后,也一定會告訴他的父母。下面我用Observer實現(xiàn)這個程序。代碼如下:
    import java.util.Vector;

    class Children{
     static private Vector<Observer> obs;
     static private String state=null;
     static{
      obs=new Vector<Observer>();
     }
     public static void attach(Observer o){
      obs.addElement(o);
     }
     public static void detach(Observer o){
      obs.removeElement(o);
     }
     public void setState(String str){
      state=str;
     }
     public String getState(){
      return state;
     }
     public void notifyObs(){
      for(Observer o:obs){
       o.update(this); 
      }
     }
    }
    interface Observer{
     public void update(Children child);
    }
    class Parent implements Observer{
     public void update(Children child){
      if(child.getState().equals("fight")){
       System.out.println("Parent,他和別人打架了");
      }else if(child.getState().equals("scholarship")){
       System.out.println("告訴Parent,他得到了獎學(xué)金");
      }
     }
    }
    class Mother implements Observer{
     public void update(Children child){
      if(child.getState().equals("fight")){
       System.out.println("告訴Mother,他和別人打架了");
      }else if(child.getState().equals("scholarship")){
       System.out.println("告訴Mother,他得到了獎學(xué)金");
      }
     }
    }
    public class Client {

     public static void main(String[] args) {
      Children child=new Children();
      Observer parent=new Parent();
      Observer mother=new Mother();
      child.attach(parent);
      child.attach(mother);
      child.setState("fight");
      child.notifyObs();
      child.setState("scholarship");
      child.notifyObs();

     }

    }

    輸出如下:
    告訴Parent,他和別人打架了
    告訴Mother,他和別人打架了
    告訴Parent,他得到了獎學(xué)金
    告訴Mother,他得到了獎學(xué)金
     小結(jié):對于Observer模式,觸發(fā)事件的對象-Subject對象無法預(yù)測可能需要知道該事件的所有對象。為了解決這一問題,我們創(chuàng)建一個Observer接口,要求所有的Observer負責(zé)將自己注冊到Subject上。

    posted @ 2007-11-28 20:34 flustar 閱讀(648) | 評論 (0)編輯 收藏

    僅列出標題
    共6頁: 上一頁 1 2 3 4 5 6 下一頁 

    posts - 146, comments - 143, trackbacks - 0, articles - 0

    Copyright © flustar

    主站蜘蛛池模板: 免费在线观看理论片| 国产卡二卡三卡四卡免费网址| 噜噜嘿在线视频免费观看| 亚洲三级在线视频| 青青视频观看免费99| 亚洲伊人久久大香线焦| 18勿入网站免费永久| 亚洲永久网址在线观看| 岛国大片免费在线观看| 国产偷国产偷亚洲清高APP| 国产麻豆剧传媒精品国产免费| 亚洲爆乳成av人在线视菜奈实| 日韩人妻无码免费视频一区二区三区 | aⅴ在线免费观看| 亚洲精品不卡视频| 国产v精品成人免费视频400条| 亚洲乱色伦图片区小说| 午夜神器成在线人成在线人免费 | 亚洲精品视频在线观看你懂的| 男女啪啪免费体验区| 亚洲一区二区女搞男| 日本高清高色视频免费| 亚洲资源在线视频| 最近高清国语中文在线观看免费| 亚洲国产av玩弄放荡人妇| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲精品久久无码| 亚洲性久久久影院| 久久久久久AV无码免费网站 | 亚洲А∨精品天堂在线| 美女网站在线观看视频免费的| 亚洲国产一区二区三区青草影视| 日本免费xxxx色视频| 亚洲第一se情网站| 亚洲深深色噜噜狠狠爱网站| 99国产精品视频免费观看| 亚洲欧美国产精品专区久久| 狠狠亚洲狠狠欧洲2019| 1000部拍拍拍18勿入免费视频下载| 欧美色欧美亚洲另类二区| 亚洲三区在线观看无套内射|