博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式的使用场景
阅读量:6658 次
发布时间:2019-06-25

本文共 3878 字,大约阅读时间需要 12 分钟。

单例模式

  我曾经做过一个文件上传的功能,文件上传需要限制的文件大小,文件类型等等都可以使用properties去设置,这个思想可以参照数据库连接池的配置,每当我们的客户进行文件上传的时候,我们都必须提取这个peoperties文件中的属性来使用,当我们提取出来后存放在内存中时,这个时候问题产生了,如果每次请求过来都需要创建一个对象的话,内存消耗会很大,我们只要把这个对象设计成单例就可以了。那么每次拿出来的时候,都会只拿到这一个对象了,但是要注意多线程并发的线程安全问题。

  工程结构:

    

  1)创建单例模式的类封装properties的属性值

    

1 package com.sky.util; 2  3 import java.util.HashMap; 4 import java.util.Map; 5  6 public class PropertiesUtil { 7     private Map
properties = new HashMap
(); 8 9 private static PropertiesUtil instance = new PropertiesUtil();10 11 private PropertiesUtil(){}12 13 public static PropertiesUtil getInstance(){14 return instance;15 }16 17 public void addProperty(String propertyName, String propertyValue){18 properties.put(propertyName, propertyValue);19 }20 21 public String getProperty(String propertyName){22 return properties.get(propertyName);23 }24 }

 

  2)创建监听器初始化properties文件并将参数传给PropertiesUtil类

1 package com.sky.listener; 2  3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.Map; 6 import java.util.Properties; 7  8 import javax.servlet.ServletContextEvent; 9 import javax.servlet.ServletContextListener;10 11 import com.sky.util.PropertiesUtil;12 13 public class FileUploadListener implements ServletContextListener{14 15     @Override16     public void contextDestroyed(ServletContextEvent arg0) {17         18     }19 20     @Override21     public void contextInitialized(ServletContextEvent arg0) {22         InputStream in = getClass().getClassLoader().getResourceAsStream("/info.properties");23         24         Properties properties = new Properties();25         try {26             properties.load(in);27             28             for(Map.Entry
prop: properties.entrySet()){29 String propertyName = (String) prop.getKey();30 String propertyValue = (String) prop.getValue();31 32 PropertiesUtil.getInstance().addProperty(propertyName, propertyValue);33 }34 35 } catch (IOException e) {36 e.printStackTrace();37 }38 }39 40 }

  3)创建servlet测试参数是否正确

1 package com.sky.servlet; 2  3 import java.io.IOException; 4  5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 import com.sky.util.PropertiesUtil;11 12 public class FileUplodServlet extends HttpServlet{13     /**14      * 15      */16     private static final long serialVersionUID = -3372491275711404747L;17     18     @Override19     protected void doPost(HttpServletRequest request, HttpServletResponse response)20             throws ServletException, IOException {21         String exts = PropertiesUtil.getInstance().getProperty("exts");22         String Maxsize = PropertiesUtil.getInstance().getProperty("file.max.size");23         String totalMaxSize = PropertiesUtil.getInstance().getProperty("total.file.max.size");24         25         System.out.println("exts : " + exts);26         System.out.println("Maxsize : " + Maxsize);27         System.out.println("totalMaxSize : " + totalMaxSize);28     }29 }

  4)web.xml的配置

1 
2
7
8
9
index.jsp
10
11
12
com.sky.listener.FileUploadListener
13
14
15
upload
16
com.sky.servlet.FileUplodServlet
17
18
19
upload
20
/upload
21
22

  5)发布验证结果

  

单例模式往往在于你只需要一个对象,例如windows的task窗口,我往往喜欢使用单例来节约对象,这也算是多种设计模式中最简单的一种了。

 

转载于:https://www.cnblogs.com/yujiwei/p/6883538.html

你可能感兴趣的文章
Oracle11g卸载方法
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
python多行注释问题
查看>>
Entity Framework 6 Code First新特性:支持存储过程
查看>>
提高squid缓存的命中率
查看>>
修改后测试环境下的varnish配置文件
查看>>
兼容IE和Chrome的拖动改变布局宽度
查看>>
学习日志---python(模块以及常用模块)
查看>>
Bash环境配置和文件的特殊权限
查看>>
写的是一个关于“心动的男孩”
查看>>
使用conga部署RHCS
查看>>
aws:使用xshell工具root用户登录EC2
查看>>
电脑软件安装手册 2019年4月22日
查看>>
centos6安装nginx最详细步骤
查看>>
vsftpd虚拟用户
查看>>
我的友情链接
查看>>
为什么要用redux?component自身管理自己的state难道不更解耦吗?
查看>>
HDU1114 Piggy-Bank
查看>>
FTPS(下)
查看>>