第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

單例模式:getInstance() 與傳遞單例對(duì)象?

單例模式:getInstance() 與傳遞單例對(duì)象?

慕后森 2023-12-13 15:12:24
使用單例模式的正確/最流行的方法是什么?限制數(shù)量。調(diào)用 getInstance() 的次數(shù),最好只調(diào)用一次,并在實(shí)例化期間將對(duì)象傳遞給其他類?class SingletonClass {// Implementataion}class MainClass {    private SingletonClass singletonClassObject;    public MainClass() {        singletonClassObject = SingletonClass.getInstance();        new SomeClass(singletonClassObject).doSomething();        new SomeOtherClass(singletonClassObject).doSomethingElse();    }}class SomeClass {    private SingletonClass singletonClassObject;    public SomeClass(SingletonClass singletonClassObject) {        this.singletonClassObject = singletonClassObject;    }    public void doSomething() {        System.out.println(singletonClassObject.getStuff());    }}class SomeOtherClass {    private SingletonClass singletonClassObject;    public SomeOtherClass(SingletonClass singletonClassObject) {        this.singletonClassObject = singletonClassObject;    }    public void doSomethingElse() {        System.out.println(singletonClassObject.getStuff());    }}不要傳遞單例對(duì)象。而是調(diào)用獲取每個(gè)類中的對(duì)象引用并將引用保存為實(shí)例變量并在需要的地方使用它。class SingletonClass {// Implementataion}class MainClass {    public MainClass() {        new SomeClass().doSomething();        new SomeOtherClass().doSomethingElse();    }}class SomeClass {    private SingletonClass singletonClassObject;    public SomeClass() {        singletonClassObject = SingletonClass.getInstance();    }    public void doSomething() {        System.out.println(singletonClassObject.getStuff());    }}class SomeOtherClass {    private SingletonClass singletonClassObject;    public SomeOtherClass() {        singletonClassObject = SingletonClass.getInstance();    }    public void doSomethingElse() {        System.out.println(singletonClassObject.getStuff());    }}甚至不要將引用保存為實(shí)例變量,而是在需要該對(duì)象的任何地方使用 SingletonClass.getInstance() 。class SingletonClass {// Implementataion}class MainClass {    public MainClass() {        new SomeClass().doSomething();        new SomeOtherClass().doSomethingElse();    }}這些方法在更好的設(shè)計(jì)、可測(cè)試性等方面如何相互比較?哪個(gè)更好?為什么?
查看完整描述

2 回答

?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊

如果我們暫時(shí)假設(shè)這SingletonClass不是單例,并且我們沒有通過調(diào)用方法獲得實(shí)例static,那么我們將面臨另一個(gè)問題,即如何將這些類鏈接在一起。這個(gè)問題是通過以下方法解決的Dependency Injection,這個(gè)概念在這里得到了很好的描述:

  • 控制容器反轉(zhuǎn)和依賴注入模式

  • 單元測(cè)試 101:控制反轉(zhuǎn)

閱讀完上面的內(nèi)容后,應(yīng)該很容易選擇.1所有類都在構(gòu)造函數(shù)中引用所需依賴項(xiàng)的選項(xiàng)。interface您甚至可以為您需要的行為創(chuàng)建一個(gè)并在 中實(shí)現(xiàn)它SingletonClass?,F(xiàn)在你看到了,類實(shí)現(xiàn)Singleton模式這一事實(shí)并沒有使它變得特別,我們應(yīng)該像其他類一樣注入它們。使用您帶來的所有好處都DI可以應(yīng)用于您的班級(jí)。

只需將其與您進(jìn)行比較.3,您就需要編寫一個(gè)需要模擬某些內(nèi)容的測(cè)試。如果是的話,這將是更令人不愉快的任務(wù).1。


查看完整回答
反對(duì) 回復(fù) 2023-12-13
?
30秒到達(dá)戰(zhàn)場(chǎng)

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊

這樣看:您質(zhì)疑編譯器是否能夠識(shí)別靜態(tài)最終引用可以編譯為內(nèi)聯(lián)引用。

我猜編譯器會(huì)將 getInstance() 轉(zhuǎn)換為內(nèi)聯(lián)引用。我不太相信編譯器會(huì)認(rèn)識(shí)到,當(dāng)您按值傳遞引用時(shí),您是故意為自己創(chuàng)建額外的工作,并且當(dāng)您傳遞引用時(shí),它會(huì)在堆棧上創(chuàng)建一個(gè)額外的引用。

我的猜測(cè)是 getInstance() 會(huì)更有效。


查看完整回答
反對(duì) 回復(fù) 2023-12-13
  • 2 回答
  • 0 關(guān)注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)