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

          1. 策略模式  - strategy pattern
          /**
              Strategy Pattern 使用參數(shù)args[](regular expression 正則表達(dá)式)決定所要讀取的文件類(lèi)型。 而不是在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) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): J2EE

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案(14)

          文章分類(lèi)(18)

          文章檔案(18)

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 高清| 石渠县| 大名县| 饶阳县| 大连市| 喀喇| 准格尔旗| 双牌县| 武定县| 会泽县| 尖扎县| 通州区| 盐池县| 新宾| 大邑县| 会理县| 五指山市| 珠海市| 宜丰县| 晋州市| 镇原县| 隆回县| 锦州市| 攀枝花市| 岱山县| 湄潭县| 晋中市| 乐昌市| 桦川县| 海丰县| 唐山市| 舟山市| 建水县| 霸州市| 赣榆县| 建宁县| 嵊泗县| 洞头县| 济阳县| 当涂县| 巢湖市|