創(chuàng)建型模式-單例

使用場景:只需要一個實例肺然。例如現(xiàn)實世界的資源:服務(wù)器蔫缸;或封裝共享資源腿准。

意義:

1际起、使得創(chuàng)建的實例始終保持一份,避免多次創(chuàng)建吐葱。
2街望、對象與現(xiàn)實資源對應(yīng)。
3弟跑、封裝共享資源灾前。

創(chuàng)建Swift單例

1、使用全局常量

//全局變量
let globalLogger = Logger()

//final修飾后孟辑,防止子類創(chuàng)建
final class Logger{
    
    private var data = [String]()
    private let arrayQ = DispatchQueue.init(label: "arrayQ")
    //只在本文件有效,防止其他地方實例
    fileprivate init() { 
    }
    
    func log(msg:String){
        //同步添加數(shù)組
        arrayQ.sync {
            data.append(msg)
        }
    }
    
    func printLog(){
       for msg in data {
            print("Log:\(msg)")
        }
    }
}

2哎甲、使用結(jié)構(gòu)體

final class BackupServer {
   //防止外界初始化
   fileprivate init(name:String) {
        self.name = name
        globalLogger.log(msg: "Created new server \(name)")
    }

    //BackupServer類型的屬性server,初始化值是結(jié)構(gòu)體的靜態(tài)屬性
    class var server:BackupServer{
        //結(jié)構(gòu)體
        struct SingletonWrapper{
            //靜態(tài)屬性饲嗽,用實例賦值
            static let singleton = BackupServer.init(name: "MainServer")
        }
        //返回結(jié)構(gòu)體的屬性值
        return SingletonWrapper.singleton
    }
}

使用注意:

1炭玫、Swift的單例模式只適用于引用類型,即類貌虾。結(jié)構(gòu)體和其他值類型是不能用的吞加,因為結(jié)構(gòu)體本身具有復(fù)制功能。

2尽狠、處理并發(fā)衔憨。因為單例是共享資源,里面如果有數(shù)組袄膏、字典等集合践图,在讀寫操作的時候就需要考慮線程安全問題,避免出現(xiàn)多個線程同時寫一個集合沉馆。Swift3的GCD需要適應(yīng)一下码党。

  • 使用串行赫舒,如上使用全局變量創(chuàng)建單例中,使用到的
  func log(msg:String){
        //同步添加數(shù)組
        arrayQ.sync {
            data.append(msg)
        }
    }
  • 也可以串行寫闽瓢,并行讀接癌。用到了barrier,它的功能就是扣讼,barrier block到達(dá)隊列頂端時缺猛,變成串行隊列,所有操作都要等待它完成椭符,完成后恢復(fù)并行隊列荔燎,直到出現(xiàn)下一個barrier block
var arrayQ = DispatchQueue.init(label: "arrayQ")
func logItem(item:T) {
        //dispatch_barrier 最新寫法
        //當(dāng)barrier隊列執(zhí)行的時候销钝,其他線程不能執(zhí)行有咨,就是串行隊列
        //執(zhí)行到其他隊列的時候就是并行隊列,直到運(yùn)行到下一個barrier
        arrayQ.async(execute: DispatchWorkItem.init(qos: DispatchQoS.default, flags: DispatchWorkItemFlags.barrier, block: { 
            self.dataItems.append(item.copy() as! T)
            self.callback(item)
        }))
    }

demo

例子都在這里

寫在后面:

我寫的關(guān)于設(shè)計模式內(nèi)容蒸健,都是來自書《精通Swift設(shè)計模式》座享,如果有興趣可以直接買來看看,不用看我的"歪曲理解"似忧。我只是一個搬運(yùn)工渣叛,記錄過程,記錄一點淺顯的理解??盯捌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淳衙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子饺著,更是在濱河造成了極大的恐慌箫攀,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幼衰,死亡現(xiàn)場離奇詭異靴跛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)塑顺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門汤求,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人严拒,你說我怎么就攤上這事扬绪。” “怎么了裤唠?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵挤牛,是天一觀的道長。 經(jīng)常有香客問我种蘸,道長墓赴,這世上最難降的妖魔是什么竞膳? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮诫硕,結(jié)果婚禮上坦辟,老公的妹妹穿的比我還像新娘。我一直安慰自己章办,他們只是感情好锉走,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著藕届,像睡著了一般挪蹭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上休偶,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天梁厉,我揣著相機(jī)與錄音,去河邊找鬼踏兜。 笑死词顾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的庇麦。 我是一名探鬼主播计技,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼喜德,長吁一口氣:“原來是場噩夢啊……” “哼山橄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起舍悯,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤航棱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后萌衬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饮醇,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年秕豫,在試婚紗的時候發(fā)現(xiàn)自己被綠了朴艰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡混移,死狀恐怖祠墅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歌径,我是刑警寧澤毁嗦,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站回铛,受9級特大地震影響狗准,放射性物質(zhì)發(fā)生泄漏克锣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一腔长、第九天 我趴在偏房一處隱蔽的房頂上張望袭祟。 院中可真熱鬧,春花似錦捞附、人聲如沸榕酒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽想鹰。三九已至,卻和暖如春药版,著一層夾襖步出監(jiān)牢的瞬間辑舷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工槽片, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留何缓,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓还栓,卻偏偏與公主長得像碌廓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子剩盒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容