中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

網(wǎng)站建設服務版權(quán)歸誰2022網(wǎng)站seo

網(wǎng)站建設服務版權(quán)歸誰,2022網(wǎng)站seo,群暉 wordpress 中文,洛陽做公司網(wǎng)站2023-05-09 設計模式(單例,工廠) 單例模式 顧名思義,就是整個系統(tǒng)對外提供的實例有且只有一個 特點: ? 1、單例類只有一個實例 ? 2、必須是自己創(chuàng)建唯一實例 ? 3、必須給所以對象提供這個實例 分類&#xff…

2023-05-09 設計模式(單例,工廠)

單例模式

顧名思義,就是整個系統(tǒng)對外提供的實例有且只有一個

特點:

? 1、單例類只有一個實例

? 2、必須是自己創(chuàng)建唯一實例

? 3、必須給所以對象提供這個實例

分類:一般分為餓漢式單例(直接實例化)和懶漢式單例(使用時才實例化)

餓漢式單例

public class SingletonTest {//構(gòu)造器私有化,防止外部調(diào)用private SingletonTest() {}//直接實例化private static SingletonTest sin = new SingletonTest();public static SingletonTest getInstance(){return sin;}
}

懶漢式單例

同步鎖(當然還有簡單的,去掉synchronized,只是存在安全問題)

public class SingletonTest1 {//構(gòu)造器私有化,防止外部調(diào)用private SingletonTest1() {}private static SingletonTest1 sin = null;//使用同步鎖保證一定會創(chuàng)建,并且只會創(chuàng)建一次public static synchronized SingletonTest1 getInstance(){if(sin == null){sin = new SingletonTest1();}return sin;}
}

雙重檢測鎖

public class SingletonTest2 {//構(gòu)造器私有化,防止外部調(diào)用private SingletonTest2() {}//使用volatile,在這里的作用是禁止指令重排//sin = new SingletonTest2();不是一個原子操作//第一步、申請內(nèi)存,第二步、初始化,第三步、地址引用給sin//如果第三步在第二步前面就執(zhí)行了,此時另一個現(xiàn)場通過getInstance獲取實例時進來判斷就不為null了,直接返回,而這個時候其實還并沒有實例化//synchronized只能保證代碼塊相較于外面是正常順序,代碼塊內(nèi)部還是可能由于指令優(yōu)化導致第三步在第二步前面就執(zhí)行了private static volatile SingletonTest2 sin = null;//為什么要判斷兩次呢//第一次是為了減少同步,不用每次進來都去加鎖//第二次是如果現(xiàn)在有兩個現(xiàn)場同時競爭鎖,那必然有一個是處于阻塞狀態(tài)的//當處于阻塞狀態(tài)的線程拿到鎖后,前面的線程肯定是已經(jīng)創(chuàng)建過實例了//如果這個時候不判斷一下的話就會有實例化一次public static SingletonTest2 getInstance(){if(sin == null){synchronized (SingletonTest2.class){if(sin == null){sin = new SingletonTest2();}}}return sin;}
}

內(nèi)部類

public class SingletonTest3 {//構(gòu)造器私有化,防止外部調(diào)用private SingletonTest3() {}private static SingletonTest3 sin = null;public static SingletonTest3 getInstance(){return SingletonClass.singleton;}//內(nèi)部類只有在使用的時候才會初始化,其中初始化是jvm控制的,單線程操作,保證了線程安全,也實現(xiàn)了懶漢式private static class SingletonClass{private static SingletonTest3 singleton = new SingletonTest3();}
}

工廠模式

工廠模式主要是為了屏蔽創(chuàng)建對象的過程,主要分為三類(靜態(tài)工廠,普通工廠,抽象工廠)

靜態(tài)工廠(簡單工廠)

public interface FactoryTest {void doSome();
}public class FactoryTest1 implements FactoryTest {@Overridepublic void doSome() {System.out.println("FactoryTest1");}
}public class FactoryTest2 implements FactoryTest {@Overridepublic void doSome() {System.out.println("FactoryTest2");}
}public class StaticFactory {public static FactoryTest creatTest(String name){if("FactoryTest1".equals(name)){return new FactoryTest1();}else if("FactoryTest2".equals(name)){return new FactoryTest2();}return null;}
}public class Test1 {public static void main(String[] args) {//通過StaticFactory工廠創(chuàng)建對應的實例類FactoryTest factoryTest1 = StaticFactory.creatTest("FactoryTest1");factoryTest1.doSome();FactoryTest factoryTest2 = StaticFactory.creatTest("FactoryTest2");factoryTest2.doSome();}
}

每次新增一個FactoryTest時,需要修改StaticFactory.creatTest()方法,這樣不合理,所以有了普通工廠模式

普通工廠

public interface FactoryTest {void doSome();
}public class FactoryTest1 implements FactoryTest {@Overridepublic void doSome() {System.out.println("FactoryTest1");}
}public class FactoryTest2 implements FactoryTest {@Overridepublic void doSome() {System.out.println("FactoryTest2");}
}public interface ICommonFactory {FactoryTest createTest();
}public class CommonFactory1 implements ICommonFactory {@Overridepublic FactoryTest createTest() {return new FactoryTest1();}
}public class CommonFactory2 implements ICommonFactory {@Overridepublic FactoryTest createTest() {return new FactoryTest2();}
}public class Test1 {public static void main(String[] args) {//通過CommonFactory1工廠創(chuàng)建對應的實例類new CommonFactory1().createTest().doSome();new CommonFactory2().createTest().doSome();}
}

每次新增一個FactoryTest時,只需要新增一個對應的CommonFactory工廠實現(xiàn)類就行,對于之前的工廠和對象不影響

抽象工廠

現(xiàn)在有手機和平板,可以使用上述的普通工廠來創(chuàng)建,但現(xiàn)在給手機和平板分了牌子,有華為手機和蘋果手機,華為平板和蘋果平板,這樣一個產(chǎn)品族的概念(分為手機和平板兩個產(chǎn)品族,手機產(chǎn)品族里面包含了華為手機和蘋果手機兩個產(chǎn)品),那么就可以使用抽象工廠模式。

//手機產(chǎn)品族
public interface Phone {void doSome();
}
public class PhoneHuawei implements Phone {@Overridepublic void doSome() {System.out.println("華為手機");}
}
public class PhonePinguo implements Phone {@Overridepublic void doSome() {System.out.println("蘋果手機");}
}//平板產(chǎn)品族
public interface Tablet {void doSome();
}
public class TabletHuawei implements Tablet {@Overridepublic void doSome() {System.out.println("華為平板");}
}
public class TabletPinguo implements Tablet {@Overridepublic void doSome() {System.out.println("蘋果平板");}
}//工廠
public interface AbsFactory {Phone buyPhone();Tablet buyTablet();
}
//華為工廠
public class HuaweiFatory implements AbsFactory{@Overridepublic Phone buyPhone() {return new PhoneHuawei();}@Overridepublic Tablet buyTablet() {return new TabletHuawei();}
}
//蘋果工廠
public class PinguoFatory implements AbsFactory{@Overridepublic Phone buyPhone() {return new PhonePinguo();}@Overridepublic Tablet buyTablet() {return new TabletPinguo();}
}public class Test1 {public static void main(String[] args) {HuaweiFatory huaweiFatory = new HuaweiFatory();huaweiFatory.buyPhone().doSome();huaweiFatory.buyTablet().doSome();PinguoFatory pinguoFatory = new PinguoFatory();pinguoFatory.buyPhone().doSome();pinguoFatory.buyTablet().doSome();}
}
http://www.risenshineclean.com/news/59269.html

相關(guān)文章:

  • 汶上1500元網(wǎng)站建設88個seo網(wǎng)站優(yōu)化基礎(chǔ)知識點
  • 學院 網(wǎng)站 兩學一做深圳網(wǎng)站seo外包公司哪家好
  • 網(wǎng)站工作室 需要什么手續(xù)新媒體營銷推廣方案
  • 512 做網(wǎng)站有做網(wǎng)站的嗎
  • 常見的企業(yè)網(wǎng)站有哪些百度店鋪怎么開通
  • 網(wǎng)站開發(fā) 實訓 報告c++培訓班學費一般多少
  • 河南最新任命12個廳級360優(yōu)化大師官方下載手機
  • 建設境外網(wǎng)站推廣軟文范文800字
  • 柳城網(wǎng)站建設官網(wǎng)優(yōu)化哪家專業(yè)
  • 做威客有什么靠譜網(wǎng)站2022最好的百度seo
  • 出口貿(mào)易網(wǎng)站廣告營銷的經(jīng)典案例
  • 網(wǎng)站建設的售后百度關(guān)鍵詞網(wǎng)站排名優(yōu)化軟件
  • 公司網(wǎng)站制作設上海網(wǎng)站制作公司
  • 網(wǎng)站開發(fā)畢設文獻網(wǎng)絡營銷swot分析
  • 網(wǎng)站后臺php開發(fā)教程seo手機關(guān)鍵詞排行推廣
  • 網(wǎng)站 分析最新戰(zhàn)爭新聞事件今天
  • 第三方做的網(wǎng)站不給源代碼站長工具如何使用
  • html怎么做網(wǎng)站設計以網(wǎng)絡營銷為主題的論文
  • 做淘寶客網(wǎng)站教程短網(wǎng)址生成網(wǎng)站
  • 建湖營銷型網(wǎng)站建設工作室銀川網(wǎng)站seo
  • 錦州網(wǎng)站建設品牌seo優(yōu)化需要多少錢
  • 個人網(wǎng)站制作網(wǎng)站2022國內(nèi)外重大新聞事件10條
  • 山東青島網(wǎng)站建設公司哪家專業(yè)制作網(wǎng)頁的流程步驟
  • 長寧網(wǎng)站推廣公司網(wǎng)絡推廣渠道公司
  • 學做衣服網(wǎng) 繽紛網(wǎng)站查收錄網(wǎng)站
  • 江陰建設銀行網(wǎng)站全網(wǎng)自媒體平臺大全
  • 網(wǎng)站建設相關(guān)推薦網(wǎng)絡優(yōu)化工程師前景
  • 做網(wǎng)站聽的純音樂seo關(guān)鍵詞首頁排名代發(fā)
  • 網(wǎng)站開發(fā)工具 楓子科技谷歌代運營
  • 怎么制作網(wǎng)站seo公司優(yōu)化方案