![設計模式淺談(一)](http://p2.ttnews.xyz/loading.gif)
今天我們來談談設計模式,設計模式總體可分為三大類:創建型模式,結構型模式,行為型模式,總共23種設計模式。本文主要概述創建型模式。
創建型模式主要有:工廠方法模式、抽象工廠模式、單例模式、原型模式、建造者模式。
一、工廠方法模式
工廠方法模式定義:定義一個創建產品的接口,但產品的具體創建延遲到他的子類具體工廠創建,(簡單工廠模式是有一個統一的工廠去創建所有的“產品”對象,違背了'開閉原則'),這完全符合創建型模式中的“使用者和創建者分離解耦”的要求。
工廠方法模式的優點:(1)使用者只需要知道工廠的名字就可以獲取到產品對象,無需知道對象的具體創建過程;(2)新增產品類型時,只需要添加對應的產品類和具體的工廠類即可,無需修改原來的工廠類,滿足‘開閉原則’。
工廠方法模式的缺點:每新增一個產品類型時就要新增一個對應的產品類,和具體的工廠類,增加了系統的複雜性。
模式組成:
![設計模式淺談(一)](http://p2.ttnews.xyz/loading.gif)
工廠方法模式組成
具體實現:
1.抽象工廠類
public abstract class AbstractHuamanFactory {
public abstract
}
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
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;
}
}
設計模式後面繼續更新,歡迎關注小馬行說~~
閱讀更多 小馬行說 的文章