国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

畢業(yè)設(shè)計做網(wǎng)站lowseo查詢軟件

畢業(yè)設(shè)計做網(wǎng)站low,seo查詢軟件,河南最新今日頭條,wordpress如何實現(xiàn)支付功單例設(shè)計模式(2) 單例模式存在的問題 單例對 OOP 特性的支持不友好 oop的特性:封裝、繼承、多態(tài)、抽象;以Id生成器代碼為例,如果未來某一天,我們希望針對不同的業(yè)務(wù)采用不同的 ID 生成算法。比如&#x…

單例設(shè)計模式(2)

單例模式存在的問題

單例對 OOP 特性的支持不友好

  • oop的特性:封裝、繼承、多態(tài)、抽象;
  • 以Id生成器代碼為例,如果未來某一天,我們希望針對不同的業(yè)務(wù)采用不同的 ID 生成算法。比如,訂單 ID 和用戶 ID 采用不同的 ID 生成器來生成。為了應(yīng)對這個需求變化,我們需要修改所有用到 IdGenerator 類的地方,這樣代碼的改動就會比較大。
單例會隱藏類之間的依賴關(guān)系
  • 通過構(gòu)造函數(shù)、參數(shù)傳遞等方式聲明的類之間的依賴關(guān)系,我們通過查看函數(shù)的定義,就能很容易識別出來。
  • 但是,單例類不需要顯示創(chuàng)建、不需要依賴參數(shù)傳遞,在函數(shù)中直接調(diào)用就可以了。如果代碼比較復(fù)雜,這種調(diào)用關(guān)系就會非常隱蔽。在閱讀代碼的時候,我們就需要仔細查看每個函數(shù)的代碼實現(xiàn),才能知道這個類到底依賴了哪些單例類。

單例對代碼的擴展性不友好

  • 以數(shù)據(jù)庫連接池為例,數(shù)據(jù)庫連接池是單例的,但是,在一個系統(tǒng)中存在慢sql,這些 SQL 語句在執(zhí)行的時候,長時間占用數(shù)據(jù)庫連接資源,導(dǎo)致其他 SQL 請求無法響應(yīng)。我們需要將數(shù)據(jù)庫連接池隔離開,一個是正常的sql執(zhí)行,一個是慢sql的執(zhí)行器;
  • 如果設(shè)計為單例的模式,印象了擴展性

單例對代碼的可測試性不友好

  • 首先,單例模式的硬編碼式使用方式使得在編寫單元測試時無法輕松地通過 mock 替換依賴的外部資源,比如數(shù)據(jù)庫。、
  • 其次,單例類持有的成員變量相當(dāng)于全局變量,被所有代碼共享,
    如果這些成員變量是可變的,就可能導(dǎo)致不同測試用例之間相互影響的問題,
  • 需要特別注意。這種情況類似于全局變量的使用,容易造成測試結(jié)果不確定性和測試用例之間的耦合。

單例不支持有參數(shù)的構(gòu)造函數(shù)

  • 數(shù)據(jù)庫連接池的情況下,需要設(shè)置數(shù)據(jù)庫連接池的大小、最大的連接數(shù)、連接存活時間等
替代方案
  • 引入外部的配置類(可以使用代碼的形式、可以采用從配置文件中加載的方式),在單例類初始化時,對單例類的成員變量進行賦值
/*** 配置類,在單例類中使用依賴注入的方式或者其他方式引入*/
class Config {public static int parmaA;public static int parmaB;
}/*** 單例類*/
public class Singleton {private static Singleton instance = null;private final int paramA;private final int paramB;public Singleton() {this.paramA = Config.parmaA;this.paramB = Config.parmaA;}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

替代方案

  • 為了保證全局唯一,除了使用單例,我們還可以用靜態(tài)方法來實現(xiàn)。這也是項目開發(fā)中經(jīng)常用到的一種實現(xiàn)思路
// 靜態(tài)方法實現(xiàn)方式
public class IdGenerator {private static AtomicLong id = new 	AtomicLong(0);
public static long getId() {return id.incrementAndGet();}
}
// 使用舉例long id = IdGenerator.getId();
  • 使用過程中的方法
    // 1. 老的使用方式public demofunction() {
//...long id = IdGenerator.getInstance().getId();
//...}// 2. 新的使用方式:依賴注入public demofunction(IdGenerator idGenerator) {long id = idGenerator.getId();}// 外部調(diào)用demofunction()的時候,傳入idGeneratorIdGenerator idGenerator = IdGenerator.getInsance();demofunction(idGenerator);

但是這是解決了決單例隱藏類之間依賴關(guān)系,對于其他的問題還是無法解決

  • 我們本質(zhì)上是實現(xiàn)類的全局唯一性,除了單例模式,我們還可以通過工廠方法,IOC容器等方案來保證
http://m.aloenet.com.cn/news/43593.html

相關(guān)文章:

  • 河南網(wǎng)站建設(shè)價位柳州網(wǎng)站建設(shè)哪里有
  • 自己做網(wǎng)站申請域名百度廣告電話號碼是多少
  • 網(wǎng)站代碼優(yōu)化方法廣州信息流推廣公司排名
  • 空濾網(wǎng)站怎么做百度網(wǎng)站排名規(guī)則
  • 企業(yè)網(wǎng)站優(yōu)化方案模板免費發(fā)布廣告
  • 晉中路橋建設(shè)集團有限公司網(wǎng)站公司想做網(wǎng)絡(luò)推廣貴不
  • 在上面網(wǎng)站上可以做統(tǒng)計圖亞馬遜市場營銷案例分析
  • 楚風(fēng)網(wǎng)站建設(shè)工作室網(wǎng)絡(luò)公司網(wǎng)站
  • 自己制作wordpress plugin網(wǎng)站 seo
  • 上海嘉定網(wǎng)站百度網(wǎng)訊科技有限公司官網(wǎng)
  • 屋頂平臺設(shè)計效果圖大全淘寶優(yōu)化
  • 單頁面營銷型網(wǎng)站制作網(wǎng)絡(luò)推廣方法有哪些
  • 包包網(wǎng)站建設(shè)可行性分析網(wǎng)店運營培訓(xùn)哪里好
  • 成都免費招聘網(wǎng)站溫州seo推廣外包
  • 網(wǎng)站單獨頁面怎么做301重定向小紅書關(guān)鍵詞檢測
  • 中職示范校建設(shè)網(wǎng)站凡科建站怎么用
  • 騰訊云做網(wǎng)站干什么用優(yōu)化防控措施
  • 網(wǎng)站建設(shè) 軟件開發(fā)的公司排名晚上國網(wǎng)app
  • 一級a做愛視頻網(wǎng)站互聯(lián)網(wǎng)推廣方案
  • 簡約創(chuàng)意情人節(jié)海報設(shè)計seo關(guān)鍵詞優(yōu)化公司哪家好
  • 空間印象商業(yè)空間設(shè)計seo公司費用
  • 建站員工網(wǎng)站推廣公司品牌
  • 網(wǎng)站有什么seo在線優(yōu)化工具
  • 邪惡做動態(tài)網(wǎng)站百度小說風(fēng)云榜
  • 濟南建設(shè)網(wǎng)站的公司seo快速培訓(xùn)
  • 做網(wǎng)站會用到的代碼單詞有沒有免費的crm系統(tǒng)軟件
  • 網(wǎng)站集約化平臺青島seo排名公司
  • wordpress變數(shù)據(jù)庫seo推廣優(yōu)化官網(wǎng)
  • 河南省建設(shè)廳網(wǎng)站人事網(wǎng)滎陽seo
  • 門戶網(wǎng)站建設(shè)自評報告seo營銷是什么