zoukankan      html  css  js  c++  java
  • 1设计模式---工厂模式。

    前几天应聘的公司发来了这道题。。。

    需求说明:纯编码的方式实现音频、文本文件、视频等各种文件的上传。要求程序的扩展性高,耦合性低。

    何为工厂模式:首先抛开工厂模式的概念,大家想想生活当中工厂的作用(为我们生产新的商品),而在编程中工厂就是给我们创建(new)新的对象。如果你用过spring,对工厂的理解可能会更深,因为其的设计中用到了工厂模式,和代理模式。闲言少叙,上代码。

    接口:

    1 package com.cn.DAO;
    2 
    3 import java.io.File;
    4 
    5 public interface IFold {
    6     public boolean reader(File url);    
    7 }

    实现类1:处理媒体类文件

     1 package com.cn.Imp;
     3 import java.io.File;
     4 import java.io.FileInputStream;
     5 import java.io.FileNotFoundException;
     6 import java.io.FileOutputStream;
     7 import java.io.IOException;
     9 import com.cn.DAO.IFold;
    11 public class UpMadie implements IFold {
    12     @Override
    13     public boolean reader(File url) {
    14 
    15         FileInputStream in = null;
    16         FileOutputStream out = null;
    17         String outUrl = "src/getAllFiles/" + url.getName().toString();
    18         File upFiles = new File("src/getAllFiles");
    19         // 判断要上传的目录下是否存在同名文件,如果存在,先删除,再上传
    20         for (File file : upFiles.listFiles()) {
    21             if (file.getName().equals(url.getName())) {
    22                 file.delete();
    23                 System.out.println("重复文件已近删除,开始上传【媒体文件】");
    24                 break;
    25             }
    26         }
    28         try {
    29             in = new FileInputStream(url);
    30             out = new FileOutputStream(new File(outUrl));
    31             byte[] b = new byte[1024];
    32 
    33             int lengs;
    34             while ((lengs = in.read(b)) != -1) {
    35                 out.write(b, 0, lengs);
    36             }
    38             return true;
    39         } catch (FileNotFoundException e) {
    40             // TODO Auto-generated catch block
    41             e.printStackTrace();
    42         } catch (IOException e) {
    43             // TODO Auto-generated catch block
    44             e.printStackTrace();
    45         }finally{
    46             
    47             try {
    48                 in.close();
    49                 out.close();
    50             } catch (IOException e) {
    51                 // TODO Auto-generated catch block
    52                 e.printStackTrace();
    53             }      
    57         }
    58         return false;
    59     }
    60 
    61 }

    实现类2:处理文本文件,引入了缓存

     1 package com.cn.Imp;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.BufferedWriter;
     5 import java.io.File;
     6 import java.io.FileInputStream;
     7 import java.io.FileNotFoundException;
     8 import java.io.FileOutputStream;
     9 import java.io.IOException;
    10 import java.io.InputStream;
    11 import java.io.InputStreamReader;
    12 import java.io.OutputStream;
    13 import java.io.OutputStreamWriter;
    14 
    15 import com.cn.DAO.IFold;
    16 
    17 /**
    18  * 字符流 读取文本:txt,doc,pdf
    19  */
    20 public class UpWords implements IFold {
    21 
    22     @Override
    23     public boolean reader(File url) {
    24         InputStream in = null;
    25         InputStreamReader ireader = null;
    26         BufferedReader breader = null;
    27         OutputStream out = null;
    28         OutputStreamWriter owriter = null;
    29         BufferedWriter bWriter = null;
    30         String outUrl = "src/getAllFiles/" + url.getName().toString();
    31         File upFiles = new File("src/getAllFiles");
    32         // 判断要上传的目录下是否存在同名文件,如果存在,先删除,再上传
    33         for (File file : upFiles.listFiles()) {
    34             if (file.getName().equals(url.getName())) {
    35                 file.delete();
    36                 System.out.println("重复文件已近删除,开始上传【文本文件】");
    37                 break;
    38             }
    39         }
    40 
    41         try {
    42             in = new FileInputStream(url);
    43             ireader = new InputStreamReader(in);
    44             breader = new BufferedReader(ireader);
    45             out = new FileOutputStream(new File("src/getAllFiles/"
    46                     + url.getName()));
    47             owriter = new OutputStreamWriter(out);
    48             bWriter = new BufferedWriter(owriter);
    49 
    50             String line;
    51             while ((line = breader.readLine()) != null) {
    52                 bWriter.write(line);
    53             }
    54             return true;
    55         } catch (FileNotFoundException e) {
    56             // TODO Auto-generated catch block
    57             e.printStackTrace();
    58         } catch (IOException e) {
    59             // TODO Auto-generated catch block
    60             e.printStackTrace();
    61         } finally {
    62             try {
    63                 bWriter.flush();
    64                 in.close();
    65                 ireader.close();
    66                 breader.close();
    67                 out.close();
    68                 owriter.close();
    69                 bWriter.close();
    70 
    71             } catch (IOException e) {
    72                 // TODO Auto-generated catch block
    73                 e.printStackTrace();
    74             }
    75         }
    76         return false;
    77     }
    78 
    79 }

    工具类1:读属性文件

     1 package com.cn.util;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.Enumeration;
     6 import java.util.HashMap;
     7 import java.util.Map;
     8 import java.util.Properties;
     9 
    10 public class PropertiesReader {
    11 
    12     public Map<String, String> getProperties(){
    13         Properties prop = new Properties();
    14         Map<String, String> map = new HashMap<String, String>();
    15         try {
    16             InputStream in  = getClass().getResourceAsStream("file.properties");
    17             prop.load(in);
    18             Enumeration en  = prop.propertyNames();
    19             while (en.hasMoreElements()) {
    20                 String key  = (String)en.nextElement();
    21                 String property = prop.getProperty(key);
    22                 map.put(key, property);                
    23             }
    24         } catch (IOException e) {
    25             // TODO Auto-generated catch block
    26             e.printStackTrace();
    27         }
    28         return map;        
    29     }
    30 }

    工具类2:弹框选择上传的文件

    package com.cn.util;
    import java.io.File;
    import javax.swing.JFileChooser;
    import javax.swing.JLabel;
    import javax.swing.filechooser.FileSystemView;
    
    public class GetFile {
    
        public File backFile() {
            JFileChooser jfc = new JFileChooser();
            // 设置当前路径为桌面路径,否则将我的文档作为默认路径
            FileSystemView fsv = FileSystemView.getFileSystemView();
            jfc.setCurrentDirectory(fsv.getHomeDirectory());
            // JFileChooser.FILES_AND_DIRECTORIES 选择路径和文件
            jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
            // 弹出的提示框的标题
            jfc.showDialog(new JLabel(), "确定");
            // 用户选择的路径或文件
            File file = jfc.getSelectedFile();
            return file;
        }
    }

    属性文件:file.properties

    1 jpg=com.cn.Imp.UpMadie
    2 png=com.cn.Imp.UpMadie
    3 mp4=com.cn.Imp.UpMadie
    4 mp3=com.cn.Imp.UpMadie
    5 wma=com.cn.Imp.UpMadie
    6 pdf=com.cn.Imp.UpWords
    7 doc=com.cn.Imp.UpWords
    8 txt=com.cn.Imp.UpWords
    9 docx=com.cn.Imp.UpWords

    测试类:Text

     1 package com.cn.test;
     2 
     3 import java.io.File;
     4 
     5 import com.cn.DAO.IFold;
     6 import com.cn.factory.FoldFactory;
     7 import com.cn.util.GetFile;
     8 
     9 public class Test {
    10 
    11     public static void main(String[] args) {
    12         //获取本地文件路径的类
    13         GetFile getback = new  GetFile();
    14         File  file= getback.backFile();
    15         String fileName  = file.getName();
    16         String[] keys  = fileName.split("\.");    
    17         String key = keys[keys.length-1];
    18         //读写文件的工厂
    19         FoldFactory factory = new FoldFactory();
    20         //接口
    21         IFold iFold = factory.getReaderFold(fileName);
    22         //具体实现方法
    23         boolean b  = iFold.reader(file);
    24         if(b==true){
    25             System.out.println(key+"文件上传成功");
    26         }else{
    27             System.out.println(key+"文件上传失败");
    28         }
    29         
    30     }
    31     
    32 }
    我们不一样
  • 相关阅读:
    创建 Smarty 对象
    C#设计模式——命令模式(Command Pattern)
    Spring.Net 简单入门学习
    设计模式六大原则(6):开闭原则
    设计模式六大原则(5):迪米特法则
    设计模式六大原则(4):接口隔离原则
    设计模式六大原则(3):依赖倒置原则
    设计模式六大原则(2):里氏替换原则
    设计模式六大原则(1): 单一职责原则
    超简单!asp.net core前后端分离项目使用gitlab-ci持续集成到IIS
  • 原文地址:https://www.cnblogs.com/bug-mark/p/8496400.html
Copyright © 2011-2022 走看看