国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Singleton設計模式簡單介紹

2019-11-18 12:15:23
字體:
供稿:網(wǎng)友

  Singleton就是單元素設計模式,該設計模式確保了在一個運用程序中,無論合飾地,這個類就只有一個實例可用.
  
  適用范圍.這種設計模式經(jīng)常用于數(shù)據(jù)源庫連接池對象等方面.因為無論你是從程序中的任何部分需要訪問數(shù)據(jù)庫,都是從該連接池中取出一個連接,用完后,再將連接放會連接池中.因此僅只需要一個連接池實例,該實例從第一次訪問初始化,到運用程序關(guān)閉,他的生命周期才結(jié)束.
  
  這種設計模式最大的特點是構(gòu)造器設為私有,再申明一個類型為自己本身的靜態(tài)私有變量myself,然后編寫一個獲取該類實例的靜態(tài)公有方法(一般使用方法名為"getInstance()",你用其他名字也可以,但是這是一個約定俗成的規(guī)范),在這個方法中,判定,假如myself未被初始化,說明是第一次訪問該對象,則調(diào)用私有構(gòu)造器對myself進行初始化,然后返回myself,假如myslef已經(jīng)被初始化,那直接返回myself.
  
  下面我就以編寫一個數(shù)據(jù)庫連接池類來具體說明一下這種設計模式.
  
  假設你已經(jīng)在你的web容器中配制好了一個名為"jdbc/xxx"的數(shù)據(jù)源
  
  package xxx;
  
  import java.sql.SQLException;
  import java.sql.Connection;
  import javax.sql.DataSource;
  
  import javax.naming.Context;
  import javax.naming.InitialContext;
  import javax.naming.NamingException;
  
  import java.util.PRoperties;
  
  public class ConnectionPool {
  
  private static String JDNI_NAME = "java:comp/env/jdbc/xxx";
  private DataSource ds;
  //申明一個類型為自己本身的變量
  [b]private static ConnectionPool mySelf;[/b]
  
  /**
  * 定義一個私有的構(gòu)造器
  * @param ds DataSource
  */
  [b]private ConnectionPool(DataSource ds)[/b] {
  
  this.ds = ds;
  }
  
  /**
  * 獲取類實例的方法
  * @return ConnectionPool
  */
  [b]public static ConnectionPool getInstance() [/b]{
  
  try {
  //假如myself未被初始化過
  if (mySelf == null) {
  Context initCtx = new InitialContext();
  if (initCtx == null) {
  throw new NamingException("error.context.init");
  }
  DataSource ds = (DataSource) initCtx.lookup(JDNI_NAME);
  //調(diào)用私有構(gòu)造器對其進行實例化
  [b]mySelf = new ConnectionPool(ds);[/b]
  }
  [b]return mySelf;[/b]
  } catch (NamingException ne) {
  ne.printStackTrace();
  throw new RuntimeException("error.connectionpool.getinstance");
  }
  }
  
  /**
  * 獲取連接方法
  * @param autoCommit boolean
  * @return Connection
  * @throws SQLException
  */
  public Connection getConnection(boolean autoCommit) throws SQLException {
  Connection con = ds.getConnection();
  con.setAutoCommit(autoCommit);
  return con;
  
  }
  }

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新疆| 阆中市| 内丘县| 水富县| 沁阳市| 兴山县| 浦城县| 韩城市| 中超| 昭觉县| 宜兴市| 楚雄市| 革吉县| 安福县| 察哈| 新闻| 福贡县| 蓝山县| 宁南县| 泰来县| 东乌珠穆沁旗| 三明市| 尼玛县| 台中县| 灌阳县| 长治市| 华阴市| 大英县| 财经| 延长县| 富顺县| 中江县| 莱芜市| 集安市| 晋州市| 平果县| 古蔺县| 习水县| 西平县| 芜湖市| 郓城县|