JDK 設(shè)計(jì)模式 Pattern

          1. 策略模式  - strategy pattern
          /**
              Strategy Pattern 使用參數(shù)args[](regular expression 正則表達(dá)式)決定所要讀取的文件類型。 而不是在code中直接hard code。
          */
          public class DirList3 {
              
          public static void main(final String[] args) {
                  File path 
          = new File("D:\\Users\\wpeng\\workspace\\Hello\\src\\think\\in\\java\\io");
                  String[] list;
                  
          if(args.length == 0){
                      list 
          = path.list();
                  }
          else{
                      list 
          = path.list(new FilenameFilter() {
                          
          private Pattern pattern = Pattern.compile(args[0]);
                          @Override
                          
          public boolean accept(File dir, String name) {
                              
          return pattern.matcher(name).matches();
                          }
                      });
                  }
                  Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
                  
          for(String dirItem : list){
                      System.out.println(dirItem);
                  }
              }
          }

          2. 裝飾者模式 - Decorator Pattern
          /**
           * 裝飾者模式 decorator pattern
           * FileInputStearm -> FileRader -> BufferReader
           * 
          @author WPeng
           * 
          @since 2012-11-5
           
          */
          public class BufferedInputFile {
              
          // Throw exceptions to console
              public static String read(String filename) throws IOException{
                  
          // Reading input by lines
                  BufferedReader in = new BufferedReader(new FileReader(filename));
                  String s;
                  StringBuilder sb 
          = new StringBuilder();
                  
          while((s = in.readLine()) != null){
                      sb.append(s 
          + "\n");
                  }
                  in.close();
                  
          return sb.toString();
              }
              
          public static void main(String[] args) throws IOException {
                  System.out.print(read(
          "BufferedInputFile.java"));

              // FileInputStream -> BufferedInputStream -> DataInputStream
              DataInputStream in = 
                      
          new DataInputStream(
                              
          new BufferedInputStream(
                                      
          new FileInputStream("FormattedMemoryInput.java")));
                  
          while(true){
                      System.out.print((
          char)in.readByte());
                  }
              }
          }
          3. 模板模式 Template pattern
          public class MappedIO {
              
          private static int numOfInts = 4000000;
              
          private static int numOfUbuffInts = 200000;
              
              
          private abstract static class Tester{
                  
          private String name;
                  
          public Tester(String name){
                      
          this.name = name;
                  }
                  
                  
          public void runTest(){
                      System.out.print(name 
          + "");
                      
          try {
                          
          long start = System.nanoTime();
                          test();
                          
          double duration = System.nanoTime() - start;
                          System.out.format(
          "%.2f\n", duration/1.0e9);
                      } 
          catch (IOException e) {
                          
          throw new RuntimeException(e);
                      }
                  }
                  
                  
          public abstract void test() throws IOException;
              }
              
              
          private static Tester[] tests = {
                  
          new Tester("Stream Write") {
                      @Override
                      
          public void test() throws IOException {
                          DataOutputStream dos 
          = new DataOutputStream(
                                  
          new BufferedOutputStream(
                                          
          new FileOutputStream(new File("temp.tmp"))));
                          
          for(int i=0; i<numOfInts; i++){
                              dos.writeInt(i);
                          }
                          dos.close();
                      }
                  },
                  
          new Tester("Mapped Write") {
                      @Override
                      
          public void test() throws IOException {
                          FileChannel fc 
          = new RandomAccessFile("temp.tmp""rw").getChannel();
                          IntBuffer ib 
          = fc.map(
                                  FileChannel.MapMode.READ_WRITE, 
          0, fc.size()).asIntBuffer();
                          
          for(int i=0; i<numOfInts; i++){
                              ib.put(i);
                          }
                          fc.close();
                      }
                  }

              };

              
          public static void main(String[] args) {
                  
          for(Tester test : tests){
                      test.runTest();
                  }
              }
          }











          posted on 2012-11-05 09:26 鹽城小土包 閱讀(179) 評論(0)  編輯  收藏 所屬分類: J2EE

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案(14)

          文章分類(18)

          文章檔案(18)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 民权县| 泰和县| 章丘市| 英山县| 响水县| 仁怀市| 蛟河市| 新竹市| 福州市| 金川县| 江川县| 措美县| 岑巩县| 武冈市| 贵港市| 涟源市| 夏津县| 孝感市| 五大连池市| 施秉县| 自贡市| 九江市| 行唐县| 海南省| 丹东市| 五华县| 门头沟区| 高要市| 宁海县| 福泉市| 林西县| 蒙山县| 卢龙县| 泗水县| 云南省| 八宿县| 库车县| 车致| 安图县| 晋江市| 泉州市|