包装设计模式——
首先建立數據連接成(自己建立的)
/**
?* 存在必要性?
?* ?? ??? ?數據庫連接作為非常重要的資源 ,用完了要不要立即銷毀?----(不能立即關閉)
?* 不能立即關閉?誰維護
?* ?? ??? ??? ?---------------專門交給一個人來管理(池-----------池子中放了好多數據庫連接)
?*
?* 非常 有必要存在!!!
?* ?? ??? ??? ??? ?池子在java類中如何表現?--------------------集合--------(Connection)----用什么集合?
?*
?* List? 集合來模擬池
?* ?? ??? ??? ?1.初始化一些連接
?*
?* @author wangli
?*
?*/
public class MyDataSource1 {
?? ?private static? List<Connection> pool = new ArrayList<Connection>();//池子
?? ?private static int size=10;
?? ?public static void setSize(int size) {
?? ??? ?MyDataSource1.size = size;
?? ?}
?? ?
?? ?//初始化池中的連接
?? ?static{
?? ??? ?try {
?? ??? ??? ?for (int i = 0; i < size; i++) {
?? ??? ??? ??? ?pool.add(JdbcUtil.getConnection());
?? ??? ??? ?}
?? ??? ?} catch (Exception e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ??? ?
?? ?}
?? ?
?? ?//統一提供方法,用于從池中獲取連接
?? ?public static synchronized Connection getConnection(){
?? ??? ?if(pool.size()>0){
?? ??? ??? ?Connection con =? pool.remove(0);//刪除這個連接,因為別人此時不能再用它
?? ??? ??? ?
?? ??? ??? ?//真正開始包裝 別人
?? ??? ??? ?MyConnection2 con2 = new MyConnection2(con,pool);
?? ??? ??? ?return con2;
?? ??? ?}else{
?? ??? ??? ?throw new RuntimeException("池中無連接");
?? ??? ?}
?? ??? ?
?? ?}
?? ?
?? ?//還回一個連接到池中
?? ?public static void close(Connection con){
?? ??? ?pool.add(con);//將這個連接回收到池中
?? ?}
?? ?//取池
?? ?public static List<Connection> getPool() {
?? ??? ?return pool;
?? ?}
?? ?
?? ?
?? ?
}
一、外包裝和被包裝實現一樣的接口 public class ConnectionAdapter implements Connection { } 二、
?//包裝模式???????????????????????????????????? //似你?? ?
public class MyConnection2? extends ConnectionAdapter {
?? ?private Connection con;//還有你
?? ?private List<Connection> pool;
?? ?//拜托你
?? ?public MyConnection2(Connection con,List<Connection> pool){
?? ??? ?this.con? = con;
?? ??? ?this.pool = pool;
?? ?}
?? ?
?? ?@Override? //改寫它
?? ?public void close() throws SQLException {
?? ??? ?pool.add(con);
?? ?}
?? ?
}
三、test測試一下
/*** @param args*/public static void main(String[] args) {MyDataSource1 myds = new MyDataSource1();System.out.println("初始化好了,池中連接數:"+myds.getPool().size());Connection con = myds.getConnection();//從池中取一個連接System.out.println("取出但未還,池中連接數:"+myds.getPool().size());System.out.println("當前連接對象:"+con);try {con.close();//面向接口編程,con其實是MyConnection2? 對象。調用的是MyConnection2 .close()既被包裝后改寫的close()方法。} catch (SQLException e) {e.printStackTrace();}System.out.println("用完后還了,池中連接數:"+myds.getPool().size());}
/**
?* 存在必要性?
?* ?? ??? ?數據庫連接作為非常重要的資源 ,用完了要不要立即銷毀?----(不能立即關閉)
?* 不能立即關閉?誰維護
?* ?? ??? ??? ?---------------專門交給一個人來管理(池-----------池子中放了好多數據庫連接)
?*
?* 非常 有必要存在!!!
?* ?? ??? ??? ??? ?池子在java類中如何表現?--------------------集合--------(Connection)----用什么集合?
?*
?* List? 集合來模擬池
?* ?? ??? ??? ?1.初始化一些連接
?*
?* @author wangli
?*
?*/
public class MyDataSource1 {
?? ?private static? List<Connection> pool = new ArrayList<Connection>();//池子
?? ?private static int size=10;
?? ?public static void setSize(int size) {
?? ??? ?MyDataSource1.size = size;
?? ?}
?? ?
?? ?//初始化池中的連接
?? ?static{
?? ??? ?try {
?? ??? ??? ?for (int i = 0; i < size; i++) {
?? ??? ??? ??? ?pool.add(JdbcUtil.getConnection());
?? ??? ??? ?}
?? ??? ?} catch (Exception e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ??? ?
?? ?}
?? ?
?? ?//統一提供方法,用于從池中獲取連接
?? ?public static synchronized Connection getConnection(){
?? ??? ?if(pool.size()>0){
?? ??? ??? ?Connection con =? pool.remove(0);//刪除這個連接,因為別人此時不能再用它
?? ??? ??? ?
?? ??? ??? ?//真正開始包裝 別人
?? ??? ??? ?MyConnection2 con2 = new MyConnection2(con,pool);
?? ??? ??? ?return con2;
?? ??? ?}else{
?? ??? ??? ?throw new RuntimeException("池中無連接");
?? ??? ?}
?? ??? ?
?? ?}
?? ?
?? ?//還回一個連接到池中
?? ?public static void close(Connection con){
?? ??? ?pool.add(con);//將這個連接回收到池中
?? ?}
?? ?//取池
?? ?public static List<Connection> getPool() {
?? ??? ?return pool;
?? ?}
?? ?
?? ?
?? ?
}
一、外包裝和被包裝實現一樣的接口 public class ConnectionAdapter implements Connection { } 二、
?//包裝模式???????????????????????????????????? //似你?? ?
public class MyConnection2? extends ConnectionAdapter {
?? ?private Connection con;//還有你
?? ?private List<Connection> pool;
?? ?//拜托你
?? ?public MyConnection2(Connection con,List<Connection> pool){
?? ??? ?this.con? = con;
?? ??? ?this.pool = pool;
?? ?}
?? ?
?? ?@Override? //改寫它
?? ?public void close() throws SQLException {
?? ??? ?pool.add(con);
?? ?}
?? ?
}
三、test測試一下
/*** @param args*/public static void main(String[] args) {MyDataSource1 myds = new MyDataSource1();System.out.println("初始化好了,池中連接數:"+myds.getPool().size());Connection con = myds.getConnection();//從池中取一個連接System.out.println("取出但未還,池中連接數:"+myds.getPool().size());System.out.println("當前連接對象:"+con);try {con.close();//面向接口編程,con其實是MyConnection2? 對象。調用的是MyConnection2 .close()既被包裝后改寫的close()方法。} catch (SQLException e) {e.printStackTrace();}System.out.println("用完后還了,池中連接數:"+myds.getPool().size());}
?
?
轉載于:https://www.cnblogs.com/baijin05/p/5073764.html
總結
- 上一篇: 遮罩窗体弹出登录页面代码实现
- 下一篇: GC基本算法及C++GC机制