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

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

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

    隨筆-19  評論-2  文章-1  trackbacks-0
      2005年8月14日
    模板模式:
           
             模板方法中分兩種方法:一種是模板方法,另一種是基本方法。
             模板方法:就是把基本方法組合在一起形成一個總算法或則總行為,這個模板方法一般會在抽象定義并且在子類種不加以修改的繼承下來。一個抽象類可以有任意多個模板方法。
             基本方法:它又分為抽象方法,具體方法,鉤子方法。
          抽象方法由抽象類申明,由子類具體實現;具體方法由抽象類申明并實現,而子類并不實現或則置換,這里面也可以有工廠方法;鉤子方法,由抽象類申明并實現,但是它是一個空的實現,一般都是由子類進行擴張實現。
    posted @ 2005-08-19 21:15 sky 閱讀(373) | 評論 (0)編輯 收藏


    import java.io.*;

    public class FileRead{
     private static double totalFile = 0;
     private static double totalDirectory = 0;

     public String replace(String value){
         StringBuffer replace = new StringBuffer(value);
         int i = 0;
         int last = replace.lastIndexOf("──");
         i = replace.indexOf("──");
         while((i != last)&&(i != -1)){
             replace.replace(i,i+"──".length(),"   ");
             i = replace.indexOf("──");
             last = replace.lastIndexOf("──");
         }
         return replace.toString();
     }

     public void searchFile(File f,String value,boolean b)throws IOException{
         StringBuffer string = new StringBuffer(value);
         string.append("──");
         boolean bool = b;
      String path = f.getAbsolutePath();
      File currentFile = new File(path); //取得當前路徑的文件
      File[] file = currentFile.listFiles();

      for(int i=0;i<file.length;i++){      
          StringBuffer s = null;
          String lastDirectory = null; 
         
          /*
           * 判斷文件夾是否為該目錄下的最后一個文件夾,如果是的話,則取消打印"│"符號
           */
          for(int k=0;k<file.length;k++){
           if(file[k].isDirectory())
            lastDirectory = new String(file[k].getName()); 
          }
          if(file[i].getName().equals(lastDirectory)){
           if(string.indexOf("│") != -1){
               string.delete(string.lastIndexOf("│"),string.lastIndexOf("│")+1);
           }
          }
           
          /*
           * 格式化打印,將符號最后的"──"變為"├──"(當最后的符號不為"│──"時)
           */     
          if(!((string.lastIndexOf("──")-1) == string.lastIndexOf("│──"))){
              s = new StringBuffer(string.substring(0,string.lastIndexOf("──")));
           s.append("├──");         
          }else{
           if(string.indexOf("│──")!=-1){
            s = new StringBuffer(string.substring(0,string.lastIndexOf("│──")));
            s.append("├──");
           }
          }
         
          if(file[i].getName().equals(file[file.length-1].getName()))
           if(s != null)
            if(s.lastIndexOf("├") != -1)
             s.replace(s.lastIndexOf("├"),s.lastIndexOf("├")+1,"└");
         
          /*
           * 如果s不為空,則將s傳入方法replace中進行格式化
           */
          if(s != null)           
           System.out.println(replace(s.toString()) + file[i].getName());
               
       if(file[i].isDirectory()){   
           totalDirectory  += 1;
            
           /*
            * 如果該文件夾的子目錄下還有兩個以上的文件和文件夾,則打印一個"│"符號,并標記bool為true
            */
               String pathstring = file[i].getAbsolutePath();
         File current = new File(pathstring); //取得當前路徑的文件
         File[] fp = current.listFiles();
         if(fp.length >1){
             bool = true;                  
         }
        
           if(bool)
            string.append("│");
          
           searchFile(file[i],string.toString(),bool);
          
           /*
            * 如果bool已經被標記過,則將上一次的"│"符號刪除
            */
           if(bool)
            if(string.indexOf("│") != -1)
                string.delete(string.lastIndexOf("│"),string.length());
           bool = false; 
       }
       totalFile += 1; 
      }
     } 
     public static void main(String args[])throws IOException{
      String path = null;
      if(args.length<1)
       path =".";
      else
       path = args[0];
      FileRead read = new FileRead();
      File file = new File(path);
      
      if(!file.exists()){
       System.err.print("the path is error");
       System.exit(1);
      } 
      read.searchFile(file,"│",false);
      System.out.println("the file is :" + (totalFile-totalDirectory));
      System.out.println("thd directory is : " + totalDirectory);
     }
    }

    該程序存在一個問題,也就是當jdk中的File類無法判斷目錄下的一些目錄是文件夾或則是文件時?

    posted @ 2005-08-19 20:20 sky 閱讀(577) | 評論 (0)編輯 收藏
    策略模式:

            策略模式的對算法的包裝,是把使用算法的責任和算法本生分開,委派給不同的對象管理。策略模式通常把一個系列的算法包裝到一系列的策略類里面,作為一個抽象策略類的子類。
    使用條件:
            如果在一個系統種有許多類,他們之間的區別僅僅在于他們的行為,并且這個系統需要動態的在幾種算法種選擇一種。       
    posted @ 2005-08-14 23:51 sky 閱讀(190) | 評論 (0)編輯 收藏
    不變模式:
           
            不變模式可以增強對象的強壯性,不變模式準許多個對象共享一個對象,這降低了對該對象進行并發訪問時的同步化開銷。如果要修改一個不變對象的狀態,則需要創建一個新的對象,并將其存入新的對象里。不變模式只涉及到一個類,一個類的內部狀態一旦被創建以后,在整個期間都不會發生變化。他有兩種一種是強不變模式和弱不變模式。
            弱不變模式:
    首先滿足沒有方法可以改變對象的狀態,則對象一旦被創建之后,對象的狀態就不會改變。二該對象的所有的屬性都是私有的,并且不準許聲明任何公有的方法來改變他們。三這個對象所引用的對象也應該是不變的對象,如果在初始化時應用了一個可變的對象,則應該對該可變對象進行復制一份,而不要使用原來的拷貝。這種模式的缺點是他可以用子類,并且子類可以是可變的對象。可變的子類可能一修改父類對象的狀態,從而可能會允許外界修改父對象的狀態。

    問題:
           為什么說可變的對象可以修該父類對象的狀態呢?怎樣做?

    強不變模式首先要滿足弱不變模式,然后將這個類聲明成final類,則它變不可能有子類了,并且也將該對象所考慮到的所有方法聲明為final。
    不變模式與享元模式有很大的相同處,他們的對象狀態都有要求不隨環境的變化而變化,不過享元模式的內涵狀態在不影響享元對象的共享時,可以為可變的。不變模式對對象的要求要比享元模式對對象的要求更嚴格。


    posted @ 2005-08-14 23:39 sky 閱讀(639) | 評論 (2)編輯 收藏
    主站蜘蛛池模板: 精品久久久久久国产免费了| 免费人成网上在线观看| 国产美女a做受大片免费| 久久er国产精品免费观看8| 亚洲国产成人久久综合| 亚洲国产香蕉碰碰人人| 少妇亚洲免费精品| 在线播放免费人成视频在线观看| 成人性生交大片免费看中文| 一级全免费视频播放| 精品亚洲成A人在线观看青青| 亚洲国产精品xo在线观看| 亚洲欧洲自拍拍偷午夜色无码| 国产精品va无码免费麻豆| 在线A级毛片无码免费真人 | 成年性午夜免费视频网站不卡| 日韩电影免费观看| 日本高清免费观看| 久久精品免费视频观看| 久久久久久国产精品免费免费男同| 成人午夜免费视频| 在线观看免费播放av片| 久久国产免费一区| 亚洲一区二区三区免费观看| 亚洲一级毛片免费观看| 免费无码肉片在线观看| 麻豆国产人免费人成免费视频| 欧洲美熟女乱又伦免费视频| 亚洲精品国产综合久久一线| 亚洲中文字幕在线第六区| 亚洲天堂久久精品| 亚洲成av人片在www鸭子| 亚洲阿v天堂在线2017免费 | 亚洲人成色99999在线观看| 亚洲爆乳无码精品AAA片蜜桃| 一级做a免费视频观看网站| 一级毛片成人免费看免费不卡| 在线播放亚洲第一字幕| 色播亚洲视频在线观看| 美女视频黄频a免费| 18禁美女黄网站色大片免费观看|