java 單例模式和工廠模式實(shí)例詳解
單例模式根據(jù)實(shí)例化對(duì)象時(shí)機(jī)的不同分為兩種:一種是餓漢式單例
,一種是懶漢式單例
。
私有的構(gòu)造方法
指向自己實(shí)例的私有靜態(tài)引用
以自己實(shí)例為返回值的靜態(tài)的公有的方法
餓漢式單例
public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return singleton; } }
懶漢式單例
public class Singleton { private static Singleton singleton; private Singleton(){} public static synchronized Singleton getInstance(){ if(singleton==null){ singleton = new Singleton(); } return singleton; } }
工廠方法模式代碼
interface IProduct { public void productMethod(); } class Product implements IProduct { public void productMethod() { System.out.println("產(chǎn)品"); } } interface IFactory { public IProduct createProduct(); } class Factory implements IFactory { public IProduct createProduct() { return new Product(); } } public class Client { public static void main(String[] args) { IFactory factory = new Factory(); IProduct prodect = factory.createProduct(); prodect.productMethod(); } }
抽象工廠模式代碼
interface IProduct1 { public void show(); } interface IProduct2 { public void show(); } class Product1 implements IProduct1 { public void show() { System.out.println("這是1型產(chǎn)品"); } } class Product2 implements IProduct2 { public void show() { System.out.println("這是2型產(chǎn)品"); } } interface IFactory { public IProduct1 createProduct1(); public IProduct2 createProduct2(); } class Factory implements IFactory{ public IProduct1 createProduct1() { return new Product1(); } public IProduct2 createProduct2() { return new Product2(); } } public class Client { public static void main(String[] args){ IFactory factory = new Factory(); factory.createProduct1().show(); factory.createProduct2().show(); } }
希望本文對(duì)各位朋友有所幫助
相關(guān)文章
java如何實(shí)現(xiàn)項(xiàng)目啟動(dòng)時(shí)執(zhí)行指定方法
這篇文章主要為大家詳細(xì)介紹了java項(xiàng)目如何啟動(dòng)時(shí)執(zhí)行指定方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07mybatis-spring:@MapperScan注解的使用
這篇文章主要介紹了mybatis-spring:@MapperScan注解的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java實(shí)現(xiàn)HashMap排序方法的示例詳解
這篇文章主要通過(guò)一些示例為大家介紹了Java對(duì)HashMap進(jìn)行排序的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解一下2022-05-05一文教你如何使用AES對(duì)接口參數(shù)進(jìn)行加密
這篇文章主要是想為大家介紹一下如何使用AES實(shí)現(xiàn)對(duì)接口參數(shù)進(jìn)行加密,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,需要的小伙伴可以了解一下2023-08-08Java語(yǔ)言中cas指令的無(wú)鎖編程實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了Java語(yǔ)言中cas指令的無(wú)鎖編程實(shí)現(xiàn)實(shí)例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09通過(guò)Java實(shí)現(xiàn)RSA加密與驗(yàn)證的方法詳解
RSA是一種非對(duì)稱(chēng)加密算法,是目前廣泛應(yīng)用于加密和數(shù)字簽名領(lǐng)域的一種加密算法,本文主要講述如何通過(guò)Java實(shí)現(xiàn)RSA加密與驗(yàn)證,應(yīng)用場(chǎng)景為與其他平臺(tái)對(duì)接接口時(shí),通過(guò)RSA加密和解密驗(yàn)證請(qǐng)求的有效性,在對(duì)接時(shí)雙方互換公鑰,需要的朋友可以參考下2023-12-12關(guān)于如何正確地定義Java內(nèi)部類(lèi)方法詳解
在Java中,我們通常是把不同的類(lèi)創(chuàng)建在不同的包里面,對(duì)于同一個(gè)包里的類(lèi)來(lái)說(shuō),它們都是同一層次的,但其實(shí)還有另一種情況,有些類(lèi)可以被定義在另一個(gè)類(lèi)的內(nèi)部,本文將詳細(xì)帶你了解如何正確地定義Java內(nèi)部類(lèi),需要的朋友可以參考下2023-05-05圖解Java經(jīng)典算法折半查找的原理與實(shí)現(xiàn)
折半查找法也叫做?分查找,顧名思義就是把數(shù)據(jù)分成兩半,再判斷所查找的key在哪?半中,再重復(fù)上述步驟知道找到?標(biāo)key,下面這篇文章主要介紹了圖解Java經(jīng)典算法折半查找的原理與實(shí)現(xiàn)2022-09-09Java中ClassLoader類(lèi)加載學(xué)習(xí)總結(jié)
本篇文章主要給大家講述了Java中ClassLoader類(lèi)加載的原理以及用法總結(jié),一起學(xué)習(xí)下。2017-12-12java8 stream 如何打印數(shù)據(jù)元素
這篇文章主要介紹了java8 stream 如何打印數(shù)據(jù)元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11