單例模式
使用單例模式構(gòu)建的類黑界,在整個程序運行期間該類只存在一個實例對象。
實現(xiàn)方式
用 private 修飾類的構(gòu)造方法皂林,這樣就不能在類的外部使用 new 關(guān)鍵字來創(chuàng)建實例對象朗鸠。
在類的內(nèi)部創(chuàng)建一個該類的對象,使用 private static 修飾础倍。
提供一個外部能獲取該類對象的靜態(tài)方法烛占。
1.餓漢模式
public class SingleLineDemo {
private SingleLineDemo() {
}
private static final SingleLineDemo SINGLELINE_DEMO = new SingleLineDemo();
public static SingleLineDemo getSingleLineDemoInstance() {
return SINGLELINE_DEMO;
}
}
2.懶漢模式
public class SingleLineDemo {
private SingleLineDemo() {
}
private static SingleLineDemo sLineDemo = null;
public static SingleLineDemo getSingleLineDemoInstance() {
// 存在線程安全問題
if (sLineDemo == null) {
sLineDemo = new SingleLineDemo();
}
return sLineDemo;
}
}
3.綜合升級
public class SingleLineDemo {
private SingleLineDemo() {
}
private static SingleLineDemo sLineDemo = null;
public static SingleLineDemo getSingleLineDemoInstance() {
// 雙重校驗,解決線程安全沟启,并效率相對較高
if (sLineDemo == null)
synchronized (sLineDemo) {
if (sLineDemo == null)
sLineDemo = new SingleLineDemo();
}
return sLineDemo;
}
}
工廠模式
工廠模式就是根據(jù)傳入的標(biāo)記忆家,生產(chǎn)不同類的模式。
//接口定義公共規(guī)范
public interface IWidget {
void widget();
}
public class FirstProduct implements IWidget {
@Override
public void widget() {
System.out.println("產(chǎn)品1的組件");
}
}
public class SecondProduct implements IWidget {
@Override
public void widget() {
System.out.println("產(chǎn)品2的組件");
}
}
public static void main(String[] args) {
IWidget productWidget = getProductWidget(0);
productWidget.widget();
}
//工廠模式德迹,根據(jù)標(biāo)記生成相應(yīng)的類
public static IWidget getProductWidget(int type) {
switch (type) {
case 0:
return new FirstProduct();
case 1:
return new SecondProduct();
}
return null;
}