設計模式 工廠模式與單例模式

2021-10-01 08:51:19 字數 2258 閱讀 1006

工廠方法模式的用意是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類中。

工廠模式完全負責設計原則,降低了物件之間的耦合度。很明顯工廠方法模式依賴於抽象的架構,將例項化的任務交由子類去完成,同時也有非常好的拓展性。

先寫乙個pizza介面,那麼乙個香噴噴的pizza要做好就需要經過如下四個步驟!

public inte***ce pizza
兩種pizza供君挑選!

pizza a~

public class apizza implements pizza 

@override

public void bake() {}

@override

public void cut() {}

@override

public void box()

}

pizza b~

public class bpizza implements pizza 

@override

public void bake() {}

@override

public void cut() {}

@override

public void box()

}

然後我們要有工廠來生產pizza,即建立出pizza的例項!

public class pizzafactory else if(type == "b")

return pizza; }

}

pizzastore可以開始營業啦!

public class pizzastore 

//使用者點餐就交給工廠去製作!

public pizza orderpizza(string type)

//測試一下!

public static void main(string args)

}

懶漢式

把自己的構造方法設定為私有的,不讓別人訪問你的例項,同時提供乙個static方法給別人獲取你的例項。

public class single1 

public static single1 getinstance()

return single1;

}}

餓漢式

定義了乙個靜態的final的例項,並且直接new了乙個物件,這樣就會導致single2 類在載入位元組碼到虛擬機器的時候就會例項化這個例項,當呼叫getinstance方法的時候,就會直接返回,不必做任何判斷。這樣做的好處是**量明顯減少了,壞處是,在沒有使用該單例的時候,該單例卻被載入了,同時如果該單例很大的話,將會浪費很多的記憶體。

public class single2 

public static single2 getinstance()

}

同步懶漢式

使用synchronized關鍵字,相當於每個想要進入該方法的獲取例項的執行緒都要阻塞,這對效能的影響是巨大的。其實只需要在例項第一次初始化的時候同步就足夠了。

public class single3 

public synchronized static single3 getinstance()

return single3;

}}

雙重檢驗鎖

執行緒第一次進入會阻塞,但相較於同步懶漢式,已經有許多進步了。

public class single4 

public static single4 getinstance()

}} return single4;

}}

懶載入內部類

public class single5 

private single5 (){}

public static final single5 getinstance()

}

列舉型別

public enum single6 

}

設計模式 單例模式 工廠模式

1.單例設計模式 乙個類中只能有乙個物件 分為 懶漢單例模式和餓漢單例模式 懶漢單例模式 1.私有化構造器 2.宣告本類引用的型別,不要去指向物件 3.提供乙個公共靜態的方法,為外部提供物件,先判斷引用型別是否為物件,如果不是,則引用指 向乙個new 類名 並返回 如果有就返回這個引用 public...

設計模式(工廠模式,單例模式)

設計模式設計模式 gof gang of four 設計模式是指前人在長期的開發經驗中 總結出來的一套用於解決特定問題的套路 設計模式原則 1 工廠模式 示例 工廠模式思想 靜態工廠模式 author whd public abstract class carclass benz extends c...

設計模式 工廠模式和單例模式

在平常實用類的時候,往往要進行類功能的擴充套件,如果直接在裡面進行擴充套件,有可能會對類裡面的其他功能產生影響,所以在擴充套件功能的時候就要重新寫類,這就要採用繼承的方式,如 1 class yunsuan 2 8 9class jia extends yunsuan 造乙個加的子類繼承父類 10 ...