单例设计模式在java类中的具体应用

java中单例设计模式是应用比较广泛的一种模式。简单说,单例设计模式是为保证类的实例对象的唯一性而存在的一种模式,最常见的就是大家常用的软件的配置文件了。具体什么是单例设计模式我就不细说了,想了解的请自行查阅。
我这里简单说说在java的API中,具体哪些类用到了单例设计模式,概括的不全,只把我学过的和认为重要的分享给大家,希望大家批评指正,也可以帮我一起完善,谢谢

一、 java.beans.Introspector
API中说法:Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。
个人理解:称之为内省,是对JavaBean的相关类中属性信息的描述
为什么需要使用单例模式
  属性是系统的一种"资源",应当避免有多余一个的对象读取特别是存储属性。此外,属性的读取可能会在很多地方发生,创建属性对象的地方应当在哪里不是很清楚。换言之,属性管理器应当自己创建自己的实例,并且自己向系统全程提供这一事例。因此,属性文件管理器应当是一个单例模式负责。
示例:
  1. //获取全部属性
  2.         @Test 
  3.         public void test1() throws Exception{
  4.                 BeanInfo bf = Introspector.getBeanInfo(Person.class);
  5.                 //BeanInfo bf = Introspector.getBeanInfo(Person.class, Object.class);//去除父类的属性:Object中的getClass
  6.                 PropertyDescriptor[] pd  = bf.getPropertyDescriptors();
  7.                 for(PropertyDescriptor p : pd){
  8.                         System.out.println(p.getName());
  9.                 }
  10.                 
  11.         }

复制代码
二、 java.lang.Runtime
API中说法:每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime 方法获取当前运行时。
个人理解:Runtime类封装了应用程序的运行环境,每个java程序都有自己的一个Runtime类的实例,但是我们不能够创建这个Runtime的实例对象,这是java程序启动时,自己就存在的。但是我们可以通过获取这个Runtime对象,从而控制java程序的状态。
比如说,我们可以通过获得Runtime实例对象,启动一个程序(如扫雷):
  1. Runtime run = Runtime.getRuntime();
  2.                 Process pro = null;
  3.                 try {
  4.                         pro = run.exec("winmine.exe");
  5.                 } catch (IOException e) {
  6.                         throw new RuntimeException("程序启动失败");
  7.                 }
  8.                 System.out.println(pro.getClass().getName());
复制代码
三、 java.net.InetAddress
API中说法:此类表示互联网协议 (IP) 地址。
个人理解:InetAddress是java作为网络编程中很重要的一个类。InetAddress的实例对象包含以数字形式保存的IP地址,同时还可能包含主机名,因此,可通过这个类中的方法获取到指定的IP地址和对应的主机名。由于IP地址是网络分配的,我们不能随便创建其对象,所以使用单例设计模式,
在InetAddress类中最为常用的就是getByName(String host)的静态方法,还有比较重要的静态方法:getLocalHost()、getHostName()以及getHostAddress()等。
示例:
  1. //获取本机IP地址  
  2.         InetAddress ia = InetAddress.getLocalHost();  
  3.         System.out.println(ia.toString());  
  4.   
  5.         //通过百度主机名获取其IP地址  
  6.         InetAddress i = InetAddress.getByName("www.baidu.com");  
  7.         System.out.println("name:" + i.getHostName());  
  8.         System.out.println("address:" + i.getHostAddress());  
复制代码
四、 一个元素的枚举
个人理解:我们创建枚举类的目的之一就在于避免外部创建其他对象,而只使用我们自己创建的指定的元素(或者说实例对象),因此,当枚举类中只有一个元素的时候,那么此时这个类就可以看成是应用了单例设计模式。
另外,枚举类是一个不可被继承的final类,其中的元素都是类的静态常量。
示例:
  1. /*
  2. * 简单模拟上线人数
  3. * 每个用户都访问同一个资源,即上线人数。
  4. * 所以需要定义为全局对象,只能有唯一的一份。
  5. */

  6. public enum EnumDemo {
  7.         
  8.         USERONLINE;
  9.         
  10.         private int userCounts = 0;
  11.         
  12.         public void addUser(){
  13.                 //每个用户上线,就加1
  14.         }
  15.         
  16.         public void delete(){
  17.                 //每个用户下线,就减1
  18.         }
  19.         
  20.         //.......
  21. }
复制代码

我这里只是做了几个简单的总结,大家也可以进行补充,提问,我会集大家之所长,会补充的。


http://bbs.itheima.com/thread-48324-1-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值