本篇內(nèi)容介紹了“單例模式之怎么實(shí)現(xiàn)我的機(jī)器人女友”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)公司專注于浦城企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),成都做商城網(wǎng)站。浦城網(wǎng)站建設(shè)公司,為浦城等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
public class GirlFriend {
private String name;
public GirlFriend(String name) {
this.name = name;
System.out.println("機(jī)器人女友制作完成");
}
public void smile() {
System.out.println("笑一個(gè) :-)");
}
public void housework() {
System.out.println("去干家務(wù)");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
public static void main(String[] args) {
GirlFriend girlFriend = new GirlFriend("小麗");
girlFriend.smile();
girlFriend.housework();
girlFriend.buKeMiaoShu();
}
機(jī)器人女友制作完成
笑一個(gè) :-)
去干家務(wù)
.......
public class GirlFriend {
private static GirlFriend girlFriend;
private String name;
private GirlFriend(String name) {
this.name = name;
System.out.println("機(jī)器人女友制作完成");
}
/**
* 對(duì)象通過getInstance方法獲取
* @param name
* @return
*/
public static GirlFriend getInstance(String name) {
if(girlFriend == null) {
girlFriend = new GirlFriend(name);
}
return girlFriend;
}
public void smile() {
System.out.println("笑一個(gè) :-)");
}
public void housework() {
System.out.println("去干家務(wù)");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
public static void main(String[] args) {
GirlFriend girlFriend = GirlFriend.getInstance("小麗");
girlFriend.smile();
girlFriend.housework();
girlFriend.buKeMiaoShu();
}
public static void main(String[] args){
for(int i = 0; i < 5; i++) {
new Thread(new Runnable() {
@Override
public void run() {
GirlFriend girlFriend = GirlFriend.getInstance("小麗");
System.out.println(girlFriend);
}
}).start();
}
}
機(jī)器人女友制作完成
singleton.singleton.GirlFriend@95458f7
機(jī)器人女友制作完成
機(jī)器人女友制作完成
singleton.singleton.GirlFriend@d9d8ad0
singleton.singleton.GirlFriend@383a0ba
singleton.singleton.GirlFriend@d9d8ad0
singleton.singleton.GirlFriend@d9d8ad0
/**
* 對(duì)象通過getInstance方法獲取
* @param name
* @return
*/
public synchronized static GirlFriend getInstance(String name) {
if(girlFriend == null) {
girlFriend = new GirlFriend(name);
}
return girlFriend;
}
public class GirlFriend {
// 在類加載的時(shí)候就創(chuàng)建對(duì)象,是線程安全的
private static GirlFriend girlFriend = new GirlFriend("小麗");
private String name;
private GirlFriend(String name) {
this.name = name;
System.out.println("機(jī)器人女友制作完成");
}
/**
* 對(duì)象通過getInstance方法獲取
* @return
*/
public static GirlFriend getInstance() {
return girlFriend;
}
public void smile() {
System.out.println("笑一個(gè) :-)");
}
public void housework() {
System.out.println("去干家務(wù)");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
不支持延遲加載(在真正用到對(duì)象的時(shí)候,再創(chuàng)建實(shí)例),在類加載的時(shí)候?qū)ο缶蛣?chuàng)建好了,如果對(duì)象在整個(gè)程序中一次都用不到,提前創(chuàng)建就浪費(fèi)了。
不能控制對(duì)象的數(shù)量,我們完全可以聲明多個(gè)對(duì)象,比如:GirlFriend girlFriend1;GirlFriend girlFriend2;GirlFriend girlFriend3。
我們可能沒有足夠的信息在靜態(tài)初始化時(shí),實(shí)例化每一個(gè)對(duì)象,對(duì)象的構(gòu)造方法參數(shù),可能要依賴程序后面的運(yùn)算結(jié)果。
public class GirlFriend {
// volatile關(guān)鍵字保證了每個(gè)線程看到的girlFriend對(duì)象都是最新的
private volatile static GirlFriend girlFriend;
private String name;
private GirlFriend(String name) {
this.name = name;
System.out.println("機(jī)器人女友制作完成");
}
/**
* 對(duì)象通過getInstance方法獲取
* @param name
* @return
*/
public static GirlFriend getInstance(String name) {
if(girlFriend == null) {
synchronized (GirlFriend.class) {
if (girlFriend == null) {
girlFriend = new GirlFriend(name);
}
}
}
return girlFriend;
}
public void smile() {
System.out.println("笑一個(gè) :-)");
}
public void housework() {
System.out.println("去干家務(wù)");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
某個(gè)類只能有一個(gè)實(shí)例
它必須自行創(chuàng)建這個(gè)實(shí)例
它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例
“單例模式之怎么實(shí)現(xiàn)我的機(jī)器人女友”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!