您好,登錄后才能下訂單哦!
本篇內容介紹了“單例模式之怎么實現我的機器人女友”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
public class GirlFriend {
private String name;
public GirlFriend(String name) {
this.name = name;
System.out.println("機器人女友制作完成");
}
public void smile() {
System.out.println("笑一個 :-)");
}
public void housework() {
System.out.println("去干家務");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
public static void main(String[] args) {
GirlFriend girlFriend = new GirlFriend("小麗");
girlFriend.smile();
girlFriend.housework();
girlFriend.buKeMiaoShu();
}
機器人女友制作完成
笑一個 :-)
去干家務
.......
public class GirlFriend {
private static GirlFriend girlFriend;
private String name;
private GirlFriend(String name) {
this.name = name;
System.out.println("機器人女友制作完成");
}
/**
* 對象通過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("笑一個 :-)");
}
public void housework() {
System.out.println("去干家務");
}
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();
}
}
機器人女友制作完成
singleton.singleton.GirlFriend@95458f7
機器人女友制作完成
機器人女友制作完成
singleton.singleton.GirlFriend@d9d8ad0
singleton.singleton.GirlFriend@383a0ba
singleton.singleton.GirlFriend@d9d8ad0
singleton.singleton.GirlFriend@d9d8ad0
/**
* 對象通過getInstance方法獲取
* @param name
* @return
*/
public synchronized static GirlFriend getInstance(String name) {
if(girlFriend == null) {
girlFriend = new GirlFriend(name);
}
return girlFriend;
}
public class GirlFriend {
// 在類加載的時候就創建對象,是線程安全的
private static GirlFriend girlFriend = new GirlFriend("小麗");
private String name;
private GirlFriend(String name) {
this.name = name;
System.out.println("機器人女友制作完成");
}
/**
* 對象通過getInstance方法獲取
* @return
*/
public static GirlFriend getInstance() {
return girlFriend;
}
public void smile() {
System.out.println("笑一個 :-)");
}
public void housework() {
System.out.println("去干家務");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
不支持延遲加載(在真正用到對象的時候,再創建實例),在類加載的時候對象就創建好了,如果對象在整個程序中一次都用不到,提前創建就浪費了。
不能控制對象的數量,我們完全可以聲明多個對象,比如:GirlFriend girlFriend1;GirlFriend girlFriend2;GirlFriend girlFriend3。
我們可能沒有足夠的信息在靜態初始化時,實例化每一個對象,對象的構造方法參數,可能要依賴程序后面的運算結果。
public class GirlFriend {
// volatile關鍵字保證了每個線程看到的girlFriend對象都是最新的
private volatile static GirlFriend girlFriend;
private String name;
private GirlFriend(String name) {
this.name = name;
System.out.println("機器人女友制作完成");
}
/**
* 對象通過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("笑一個 :-)");
}
public void housework() {
System.out.println("去干家務");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
某個類只能有一個實例
它必須自行創建這個實例
它必須自行向整個系統提供這個實例
“單例模式之怎么實現我的機器人女友”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。