工廠模式總結

2021-09-13 13:33:36 字數 3461 閱讀 9417

工廠模式實現了建立者和呼叫者的分離,工廠模式分為簡單工廠模式、工廠模式、抽象工廠模式。

工廠模式有很多的應用場景

1、jdk中calendar的getinstance()方法。

2、jdbc中connection物件的獲取。

3、spring中ioc容器建立者管理bean物件

4、xml解析時的documentbuilde***ctory建立解析器物件

5、反射中class物件是newinstance()。

下面,我們先來介紹一下工廠模式

簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。

public inte***ce operation 

public class add implements operation}

public class sub implements operation}

public class mul implements operation}

public class div implements operation

return numbera / numberb;

}}public class easyfactory

return operationobj;

}}public class client

}

簡單工廠模式用工廠類方法代替new操作,將選擇實現類,建立物件進行統一管理和控制

缺點:如果需要在方法裡寫很多與物件建立有關的業務**,而且需要的建立的物件還不少的話,我們要在這個簡單工廠類裡編寫很多個方法,這樣就導致耦合性比較高。

對於簡單工廠模式的缺點,工廠方法模式中是乙個子類對應乙個工廠類,而這些工廠類都實現於乙個抽象介面。

abstract class car  

public void setname(string name)

} class benz extends car

} class bmw extends car

}

abstract class driver

class benzdriver extends driver

} class bmwdriver extends driver

}

public class boss

}

這裡我們不難看出,定義了乙個抽象產品類,其中有兩個類實現了這個抽象類,有定義了乙個工廠類,通過繼承這個工廠類分別實現例項化產品類,這就大大降低了耦合

它和工廠方法模式的區別就在於需要建立物件的複雜程度上。而且抽象工廠模式是三個裡面最為抽象、最具一般性的。抽象工廠模式的用意為:給客戶端提供乙個介面,可以建立多個產品族中的產品物件。

//抽象產品(bmw和audi同理)  

abstract class benzcar

public void setname(string name)

} //具體產品(bmw和audi同理)

class benzsportcar extends benzcar

} class benzbusinesscar extends benzcar

}

abstract class bmwcar

public void setname(string name)

} class bmwsportcar extends bmwcar

} class bmwbusinesscar extends bmwcar

}

abstract class audicar

public void setname(string name)

} class audisportcar extends audicar

} class audibusinesscar extends audicar

}

//抽象工廠

abstract class driver3

//具體工廠

class sportdriver extends driver3

public bmwcar createbmwcar(string car) throws exception

public audicar createaudicar(string car) throws exception

} class businessdriver extends driver3

public bmwcar createbmwcar(string car) throws exception

public audicar createaudicar(string car) throws exception

}

//老闆

public class bossabstractfactory

}

這裡我們是不方便擴充套件的,不妨我們用反射+簡單工廠來改進抽象工廠

abstract class benzcar  

public void setname(string name)

} class benzsportcar extends benzcar

} class benzbusinesscar extends benzcar

}

abstract class bmwcar

public void setname(string name)

} class bmwsportcar extends bmwcar

} class bmwbusinesscar extends bmwcar

}

abstract class audicar

public void setname(string name)

} class audisportcar extends audicar

} class audibusinesscar extends audicar

}

/**

* 簡單工廠通過反射改進抽象工廠及其子工廠

* @author administrator

* */

class driver3

public static bmwcar createbmwcar(string car) throws exception

public static audicar createaudicar(string car) throws exception

} //客戶端

public class ******andabstractfactory

}

工廠模式總結

工廠類判斷要生產什麼產品並呼叫相應的建構函式。當增加新產品時就要修改工廠類,這違反了 軟體實體 類 模組 函式 可以擴充套件,但是不可修改 的開放封閉原則。產品基類有純虛函式。產品子類繼承產品基類。工廠類中有生產函式。使用方法 建立產品基類指標,建立工廠物件,呼叫工廠物件的生產函式,套入產品型別引數...

簡單工廠模式總結

簡單工廠模式提供了專門的工廠類用於建立物件,將物件的建立和物件的使用分離開,它作為一種最簡單的工廠模式在軟體開發中得到了較為廣泛的應用。1.主要優點 簡單工廠模式的主要優點如下 1 工廠類包含必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項,客戶端可以免除直接建立產品物件的職責,而僅僅 消費...

設計模式個人總結 工廠模式

1.為什麼需要設計模式 模式即是方法,解決問題有好壞。在功能實現的基礎上我們要求做到設計更好,所以有了設計模式!2.工廠模式的學習 看到的例子裡說有乙個類有很多子類,需要例項化的同時,為了避免若干個問題 1.為了 的封裝性和隱藏性 2為了避免雜亂.3.為了秉承物件導向的精神裡的高內聚,低偶合。還有什...