码迷,mamicode.com
首页 > 其他好文 > 详细

day06_01_设计模式_单例模式

时间:2015-07-18 11:02:43      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:单例模式


Singleton Pattern
Ensure a class has one instance,and provide a global point of access to it. 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

皇帝只有一个
首先我们来想想,如何获取一个对象,一般是通过new来实现,高级的通过反射,但是该如何禁止外部创建对象。
answer : 将构造方法设为私有

技术分享


优点: 减少内存开支,一个对象需要频繁的创建,销毁时。 避免了子类的多重占用,设置全局的访问点,优化和共享资源访问。
缺点: 扩展性差,我想着是它的优点吧。
使用场景:
要求生成唯一序列号
整个项目中需要一个共享访问点或共享数据
工具类

饿汉式和懒汉式的比较

<span style="font-size:12px;">public class Emperor {
 private final static Emperor emperor =new Emperor();
 
 private Emperor(){}
 
 public static Emperor instance(){
  return emperor;
 }
 public void order(){
  System.out.println("吾皇有旨");
 }
}</span>
<span style="font-size:12px;">public class Emperor {
 private final static Emperor emperor = null;

 private Emperor() {
 }

 public static synchronized Emperor instance() {
  if (emperor == null) {
   return new EmperorII();
  } else {
   return emperor;
  }
 }
 public void order() {
  System.out.println("吾皇有旨");
 }
}</span>

对比:饿汉式主要需要考虑的问题是效率问题,类加载实例化对象时,需要内存,自然就加重了JVM的负担
        懒汉式解决了上述问题,延时加载,但是需要注意的是多线程中的线程同步问题即可。

下面就是之前项目中的一个应用,可惜当时讲的时候还不懂。现在终于懂了。

<span style="font-size:12px;">import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

//单例模式:可以保证系统中一个类只有一个实例,并且,这个实例容易被外界调用。好处就是节省系统的资源
//如果希望系统中的某个类的对象只有一个,这个时候你可以选择用单例
 
public class Myproperties extends Properties {
 
 private static Myproperties mypro=null;  //对外提供的实例
 
 /**
  * 单例的核心就是   构造方法私有化
  */
 private Myproperties(){
  //比db.properties中读取所有的配置,
  //通过类的反射实例,获取classpath类路径下的资源文件db.properties,并建立一个流
  InputStream is=this.getClass().getResourceAsStream("/db.properties");
  try {
   this.load(is);   //把流变为一个properties 结构的文档    ,从输入流
  } catch (IOException e) {
   e.printStackTrace();
   LogUtil.log.error(e.toString());
  }finally{
   try {
    is.close();
   } catch (IOException e) {
    e.printStackTrace();
    LogUtil.log.error(e.toString());
   }   //关闭流
  }
 }
 
 /**
  * 对外提供一个获取唯一实例的方法
  * @return
  */
 public static Myproperties getMyproperties(){
  if( mypro==null){
   mypro=new Myproperties();
  }
  return mypro;
 }
}</span>
<span style="font-size:12px;">/**
  * 获取数据库连接的方法
  * @return:返回获取到的连接
  */
 public Connection getConnection() {
  try {
   con = DriverManager.getConnection(Myproperties.getMyproperties()
     .getProperty("url"), Myproperties.getMyproperties());
  } catch (SQLException e) {
   e.printStackTrace();
   LogUtil.log.error(e.toString());
  }
  return con;
 }</span>

最近打了俩天的LOL,之前学的有点烦,没有实际应用。还好最近调整好了状态,keep going!

我是菜鸟,我在路上。

版权声明:本文为博主原创文章,未经博主允许不得转载。

day06_01_设计模式_单例模式

标签:单例模式

原文地址:http://blog.csdn.net/cjvs9k/article/details/46940007

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!