1. 程式人生 > >單例模式工廠模式

單例模式工廠模式

eight 不同的 name 利用 創建樹 pan cto finall har

單例模式

單例模式的目的就是為了控制特定的類只產生一個對象。

產生單例的步驟:

1、構造方法私有化(在構造方法前面加prevate static finall)為的是不讓其他類創建該類的實例化對象。

2、在類中自己創建自己的實例化對象。

3、寫一個方法,返回該實例化對象。

4、在該類中還可以寫其他的方法。

具體的代碼如下:

public class Danli

{

// 構造方法私有化,讓其他類調用不到

private Danli()

{

}

// 在類中自己創建自己的實例化對象,

private static final Danli danli = new

Danli();

// 寫一個方法,可以返回該唯一單例的實例化對象

//註意一定要加static不然其他的類中調用不到該方法,也就創建不到實例化對象

Public static Danli getDanli()

{

return danli;

}

// 在單例的類中寫其他的方法,一般是其他類共享的數據

public static void doSomething()

{

System.out.println("這是單例");

}

}

Java中使用單例的優勢:

1、減少Java中因為創建實例所帶來的開銷。

2、便於系統跟蹤單個Java實例的生命周期和實例狀態。

Java單例運用的場景

1、要求生成唯一序列號的環境

2、在整個項目中需要一個共享訪問點,或者共享訪問數據

3、需要定義大量的靜態常量和靜態方法(如工具類)的環境

4、創建一個對象需要消耗的資源過多,如要訪問IO(輸入流)和數據庫資源

工廠模式

工廠模式主要是為創建對象提供過渡接口,以便將創建對象的過程屏蔽起來達到提高靈活性的目的。

簡單工廠模式

簡單工廠模式又稱為靜態工廠模式,它屬於創建型模式。主要是根據傳入的變量的不同返回不同類型的實例化對象。被創建的類通常都有共同的父類或者是實現了共同的接口。

簡單工廠模式的組成:

1、工廠類(factory):由具體的Java類實現,該類根據參數的不同創建不同的實例化對象。

2、抽象產品(product):一般是有factory創建的具體的實體類的父類或者是他們共同實現的接口。

3、具體的產品(factory product):factory具體要創建的實體類。

例子:利用簡單工廠模式描述果園系統;抽象出的類包括:【1抽象產品fruit】【2具體產品apple樹,grapestrawBerry樹】【工廠類 園丁gardener種樹】

具體的代碼如下:

1抽象產品fruit

/**

* 接口裏面寫水果類必備的方法:種植plant();成長grow();和豐收harvest();

*/

public interface Fruit

{

public void plant();

public void grow();

public void harvest();

}

2具體產品apple樹,grapestrawBerry樹】

public class Apple implements Fruit

{

@Override

public void plant()

{

// TODO Auto-generated method stub

System.out.println("種蘋果樹");

}

@Override

public void grow()

{

// TODO Auto-generated method stub

System.out.println("蘋果樹在成長");

}

@Override

public void harvest()

{

// TODO Auto-generated method stub

System.out.println("收蘋果");

}

}

工廠類 園丁gardener種樹】

/**

* gardenner負責創建具體的實例化對象

*/

public class Gardener

{

// 寫一個方法,返回值是具體要創建的對象的父類,或者是他們共同實現的接口

public Fruit factory(String fruitName)

{

if ("apple".equals(fruitName))

{

return new Apple();

}

else if ("grape".equals(fruitName))

{

return new Grape();

}

else if ("strawberry".equals(fruitName))

{

return new StrawBerry();

}

else

{

System.out.println("輸入的名字不正確");

return null;

}

}

}

測試

public class Test

{

public static void main(String[] args)

{

// 實例化工廠對象

Gardener gardener = new Gardener();

// 創建蘋果樹

Fruit apple = gardener.factory("apple");

apple.plant();

apple.grow();

apple.harvest();

// 創建葡萄樹,並調用裏面的在成長方法

Fruit f1 = gardener.factory("grape");

f1.grow();

// 創建葡萄樹,並調用裏面的在成長方法

Fruit f2 = gardener.factory("grape");

f2.grow();

// 創建樹用的不是單例,所以f1 != f2

System.out.println(f1 != f2);

}

}

簡單工廠模式使用的環境:

1、工廠類負責創建的對象那個比較少

2、客戶只知道傳入工廠類的方法,對於如何創建對象則不關心

工廠方法模式

工廠方法模式在簡單工廠模式的基礎上添加了抽象工廠,這樣就可以在對不同的產品使用不同的工廠。

工廠方法模式的組成

1、抽象工廠角色:工廠的實體類抽象出來的接口,或者他們共同繼承的父類

2、具體工廠角色:裏面寫具體的業務邏輯相關的代碼

3、抽象產品角色:具體的產品共同繼承的父類或者實現的接口,負責定義產品的共性,實現對事物的最抽象的定義。

4、具體的產品角色:具體的工廠所創建的對象。在Java中由具體的類實現

技術分享工廠方法模式的結構圖

技術分享技術分享

工廠方法模式使用的場景:

1、一個類不知道他需要的對象的類

2、一個類通過其子類制定創建哪個對象

對於抽象工廠類只需要提供一個創建產品的接口,而又其子類確定具體要創建的對象。在程序運行時,子類對象將覆蓋父類對象,從而使系統共容易擴展。

將創建對象的任務委托給多個工廠子類中的某一個,客戶端在使用時可以不用關心是哪一個工廠子類在創建產品子類,需要時在動態指定,可以將具體的工廠類的類名儲存在配置文件中或者數據庫中。

單例模式工廠模式