单例模式的理解与应用
2015-12-21 15:49
253 查看
java模式之单例模式:
单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
1,一个类只能有一个实例
2,自己创建这个实例
3,整个系统都要使用这个实例
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录
数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。
外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer
Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。
一个例子:Windows
回收站。
在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。
在很多开发中,项目为了节约资源,都把一个类的构造函数变为私有化,这样整个项目中就不能创建多个实例,这样的方法我们称为单例模式
现在通过代码来简介下这个单例模式:
在新建一个java项目后,创建一个实体类User.java,和测试类,main.java
代码如下:
再添加main代码来测试:
这里就得main.java就可以直接通过User.getInstens()来拿到User 的实例对象。
而在整个项目中就可以保证 该实例只被创建一次,被多次使用;故称之为单例模式
java模式之单例模式:
单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
1,一个类只能有一个实例
2,自己创建这个实例
3,整个系统都要使用这个实例
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录
数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。
外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer
Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。
一个例子:Windows
回收站。
在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。
在很多开发中,项目为了节约资源,都把一个类的构造函数变为私有化,这样整个项目中就不能创建多个实例,这样的方法我们称为单例模式
现在通过代码来简介下这个单例模式:
在新建一个java项目后,创建一个实体类User.java,和测试类,main.java
代码如下:
1 public class User { 2 private static User user; 3 4 //添加该实例的属性 5 private String name; 6 private String sex; 7 private String age; 8 /** 9 * @return 10 * 初始化一个实例 11 */ 12 public static User getInstens(){ 13 if(user == null){ 14 user = new User(); 15 } 16 return user; 17 } 18 19 /** 20 *为了实现 整个项目中,该对象的实例只有一个(有利于节约资源),从而私有化该实例的构造方法 21 *这样就没办法在其他地方new 出一个实例 22 */ 23 private User(){ 24 25 } 26 27 public User getUser() { 28 return user; 29 } 30 public void setUser(User user) { 31 this.user = user; 32 } 33 public String getName() { 34 return name; 35 } 36 public void setName(String name) { 37 this.name = name; 38 } 39 public String getSex() { 40 return sex; 41 } 42 public void setSex(String sex) { 43 this.sex = sex; 44 } 45 public String getAge() { 46 return age; 47 } 48 public void setAge(String age) { 49 this.age = age; 50 } 51 52 }
再添加main代码来测试:
1 public class main { 2 public static void main(String ages[]) { 3 4 User user = User.getInstens(); 5 user.setName("单列模式"); 6 System.out.println(user.getName()); 7 } 8 }
这里就得main.java就可以直接通过User.getInstens()来拿到User 的实例对象。
而在整个项目中就可以保证 该实例只被创建一次,被多次使用;故称之为单例模式
相关文章推荐
- hibernate的优点 &设计思想
- ubuntu系统备份与还原
- Html5 onpopstate 事件禁止手机设备上的返回操作
- 学习PHP到底要学习哪些东西?
- 判断素数与产生素数表(质数)
- crontab 任务计划
- MD5 加密的简单封装
- EMV标准_百度百科
- 二分匹配最大独立集——hdu1068
- 千万并发的秘密-内核是问题的根本
- Lesson 30 The death of a ghost
- Linux指令--watch,at
- 插入排序的简单解释(C++)
- Android开发艺术探索学习-View的事件分发机制(二)
- jquery 使用过程中,iso 与 安卓 ,chrome ,ie 的差异性
- SSH——Struts2大战SpringMVC
- The 2015 China Collegiate Programming Contest E. Ba Gua Zhen hdu 5544
- Linux指令--watch,at
- 查看Linux系统版本的命令
- scala伴生对象,apply()及单例