設計模式(design pattern),是一套被反覆使用、經過分類編目的、**設計經驗的總結,使用設計模式是為了可重用**、保證**可靠性、程式的重用性。
1995 年,gof(gang of four,四人組)合作出版了《設計模式:可復用物件導向軟體的基礎》一書,共收錄了 23 種設計模式。
總體來說設計模式分為三大類:
建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:介面卡模式、裝飾器模式、**模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。
單例模式又叫做單態模式,保證乙個類僅有乙個例項。
/*
* 餓漢式
* 保證次類的物件,具有唯一性
* 單例
* 1: 私有修飾構造方法
* 2: 建立本類物件,自己new自己
* 3: 公共方法,返回本類物件
*/public
class
single
private
static single s =
newsingle()
;public
static single getinstnce()
}
/*
* 懶漢式
* 保證次類的物件,具有唯一性
* 單例
* 1: 私有修飾構造方法
* 2: 建立本類物件,自己new自己
* 3: 公共方法,返回本類物件
*/public
class
single
private
static single s = null;
public
static single getinstnce()
return s;
}}
/*
* 保證次類的物件,具有唯一性
* 單例
* 1: 私有修飾構造方法
* 2: 建立本類物件,自己new自己
* 3: 公共方法,返回本類物件
*
* 懶漢式 : 出現執行緒安全問題
* if(s==null)
* 多個執行緒(cpu掛起)
* s = new single();
*/public
class
single
private
static single s = null;
public
static
synchronized single getinstnce()
return s;
}}
/*
* 保證次類的物件,具有唯一性
* 單例
* 1: 私有修飾構造方法
* 2: 建立本類物件,自己new自己
* 3: 公共方法,返回本類物件
*
* 懶漢式 : 出現執行緒安全問題
* 同步方法之後,不滿意
* 鎖太重
*
* 如果乙個執行緒,執行後,變數s 不是空,物件位址
* 當下乙個執行緒 ,再執行沒有必要在拿鎖,再判斷,直接 return
* 雙重判斷
*
*
*/public
class
single
private
static
volatile single s = null;
public
static single getinstnce()
}}return s;
}}
單例設計模式dcl,成員變數,是否需要新增關鍵字 volatile 加,必須加
volatile(修飾符) 寫在成員變數, 防止指令重排序
建立物件的指令 :
堆記憶體開闢空間 (位址)
初始化自己的成員變數 private int a = 1
先預設值0
定義值
呼叫構造方法
位址傳遞給引用變數
以上指令,按照順序進行,如果cpu出現了指令上亂序, 出現物件沒有建立完成,先將記憶體的位址賦值到引用變數
如果另乙個執行緒執行,帶走變數,沒有建立完成的物件!!
保證記憶體的可見性 : 記憶體中的資料,只要有1個執行緒進行了更新,其他執行緒都會讀取到最新的資料
乙個物件,做為同步鎖來使用,鎖會有四個狀態
重鎖 重鎖是效率底下,要和作業系統互動,將執行緒全部進入到cpu的阻塞佇列
呼叫了wait() notify() 直接公升級為重鎖
設計模式及例子講解(todo)
學習設計模式中一些簡單的筆記 為什麼要學習設計模式 我們學設計模式,是為了學習如何合理的組織我們的 如何解耦,如何真正的達到對修改封閉對擴充套件開放的效果,而不是去背誦那些類的繼承模式,然後自己記不住,回過頭來就罵設計模式把你的 搞複雜了,要反設計模式。設計模式的目的只有乙個 降低物件之間的耦合,增...
KVC設計模式講解
在objective c語言中,可以用 property和 synthesize來建立例項變數的屬性,因此物件訪問的時候可以直接使用點語法。但是,如果不宣告屬性,如何訪問到物件的例項變數呢?kvc就解決了這一問題。kvc 全稱key value coding,也就是鍵值編碼。先看下面乙個例子 int...
mysql講解及使用
非關係型資料庫 mongodb hbase neo4j 分類 語法說明 1 sql語言不嚴格區分大小寫,通常關鍵字大寫,其他小寫。2 sql語句通常以封號結束,如果是dos命令下,封號不能省略,表示一條語句結束。ddl之資料庫的操作 2 查詢伺服器上已存在的所有資料庫 語法 show databas...