設計模式淺談(一)

設計模式淺談(一)

今天我們來談談設計模式,設計模式總體可分為三大類:創建型模式,結構型模式,行為型模式,總共23種設計模式。本文主要概述創建型模式。

創建型模式主要有:工廠方法模式、抽象工廠模式、單例模式、原型模式、建造者模式。

一、工廠方法模式

工廠方法模式定義:定義一個創建產品的接口,但產品的具體創建延遲到他的子類具體工廠創建,(簡單工廠模式是有一個統一的工廠去創建所有的“產品”對象,違背了'開閉原則'),這完全符合創建型模式中的“使用者和創建者分離解耦”的要求。

工廠方法模式的優點:(1)使用者只需要知道工廠的名字就可以獲取到產品對象,無需知道對象的具體創建過程;(2)新增產品類型時,只需要添加對應的產品類和具體的工廠類即可,無需修改原來的工廠類,滿足‘開閉原則’。

工廠方法模式的缺點:每新增一個產品類型時就要新增一個對應的產品類,和具體的工廠類,增加了系統的複雜性。

模式組成:

設計模式淺談(一)

工廠方法模式組成

具體實現:

1.抽象工廠類

public abstract class AbstractHuamanFactory {

public abstract T createHumMan(Class t);

}

2.抽象產品

public abstract interface Huaman {

void getcolor();

void getSay();

}

3.具體產品類

public class BlackMan implements Huaman{

@Override

public void getcolor() {

System.out.println("黑色");

}

@Override

public void getSay() {

System.out.println("black...");

}

}

public class YellowMan implements Huaman{

@Override

public void getcolor() {

System.out.println("黃色");

}

@Override

public void getSay() {

System.out.println("yellow...");

}

}

4.具體工廠

public class HuamanFactory extends AbstractHuamanFactory{

@Override

public T createHumMan(Class t) {

Huaman huaman=null;

try {

huaman = (Huaman) Class.forName(t.getName()).newInstance();

} catch (Exception e) {

e.printStackTrace();

}

return (T) huaman;

}

}

5.測試

public class HumanTest {

public static void main(String[] args) {

HuamanFactory huamanFactory = new HuamanFactory();

BlackMan blackMan = huamanFactory.createHumMan(BlackMan.class);

blackMan.getcolor();

blackMan.getSay();

YellowMan yellowMan = huamanFactory.createHumMan(YellowMan.class);

yellowMan.getcolor();

yellowMan.getSay();

}

}

設計模式淺談(一)

測試結果

二、單例設計模式:確保某個類只有一個實例

實現方式:

1.懶漢式單例(延遲加載)

public class Singleton {

private Singleton() {}

private static Singleton single=null;

//靜態工廠方法

public static Singleton getInstance() {

if (single == null) {

single = new Singleton();

}

return single;

}

}

2.雙重檢查鎖定(雙重檢測延遲加載)該方法需要注意jvm重排序問題,volatile修飾符變量解決
public

class Singleton {

private volatile static Singleton instance = null;

private Singleton() {}

public static Singleton getInstance() {

if (instance == null) {

synchronized (Singleton.class) {// 1

if (instance == null) {// 2

instance = new Singleton();// 3

}

}

}

return instance;

}

}

設計模式後面繼續更新,歡迎關注小馬行說~~

設計模式淺談(一)


分享到:


相關文章: