最近無意中看到一些對·單例模式·介紹的資料,有以下幾個(gè)疑問:很多資料說單例模式無法繼承, 我自己覺得不對, 單例模式完全可以將private設(shè)置為protected, 然后將self設(shè)置為static來實(shí)現(xiàn)繼承功能呀, 不知道說無法繼承的是哪個(gè)角度思考的, 所以有疑問?假設(shè)我的項(xiàng)目中有很多功能, 我的理解是 "用戶每操作一下, 都會產(chǎn)生一個(gè)進(jìn)程, 或者是一個(gè)進(jìn)程中制作一次請求--相應(yīng)操作, 然后當(dāng)前操作在服務(wù)器運(yùn)行完成并返回響應(yīng), 則進(jìn)程結(jié)束, 這樣的話, 假設(shè)你有個(gè)單例類是Log類, 用來記錄日志, 那么本次進(jìn)程結(jié)束后, 進(jìn)程中的單例自然也就被銷毀了, 另外一次操作的話, 這次操作會再次生成新的Log實(shí)例"所以單例應(yīng)該是按一個(gè)個(gè)的進(jìn)程為單位來討論的, 但是很多資料說 "如果實(shí)例化的對象長時(shí)間不被利用,系統(tǒng)會認(rèn)為是垃圾而被回收,這將導(dǎo)致對象狀態(tài)的丟失。" 這怎么理解? 多長時(shí)間算是長?畢竟我的項(xiàng)目根據(jù)功能點(diǎn)的不同, 可能有些功能點(diǎn)復(fù)雜, 有些簡單, 我的Log實(shí)例要在每個(gè)功能中做日志記錄, 難道還得考慮功能運(yùn)行過長的話.... 我的日志會丟失一部分?還有資料說:"濫用單例將帶來一些負(fù)面問題,如為了節(jié)省資源將數(shù)據(jù)庫連接池對象設(shè)計(jì)為的單例類,可能會導(dǎo)致共享連接池對象的程序過多而出現(xiàn)連接池溢出"數(shù)據(jù)庫連接池一般不就是個(gè)類似數(shù)組的容器么? 我第一次建立好數(shù)據(jù)庫連接之后, 將連接對象放入連接池中, 如果進(jìn)程中再次需要連接數(shù)據(jù)庫的話, 直接從連接池中取出之前創(chuàng)建好的連接對象不就行了(而且我看比如TP3.2就是這么做的)所謂 "連接池溢出" 是什么意思, 難道是說本次進(jìn)程中有 n 個(gè) 不同的數(shù)據(jù)庫連接, 導(dǎo)致連接池中存放數(shù)據(jù)對象過大導(dǎo)致的內(nèi)存溢出?不應(yīng)該吧, 如果連接池是數(shù)組, 能放不少數(shù)據(jù)的啊, 而什么業(yè)務(wù)能在一個(gè)進(jìn)程中操作這么多不同的數(shù)據(jù)庫連接, 所以還是沒能理解TP3.2框架使用單例也是非完全套用 三私一公 來實(shí)現(xiàn)的, 比如ThinkDriverDb 只做到靜態(tài)化所有方法即可, 你即使new出來也沒用, 這樣是不是也沒什么槽點(diǎn)?
(PHP)單例模式 怎么蹦出好多問題, 煩請大家?guī)兔χ更c(diǎn)一二
慕碼人2483693
2018-08-04 14:23:19