|
?工廠模式?
.核心本質(zhì):
? -實例化對象,用工廠方法代替new操作。
? -將選擇實現(xiàn)類,創(chuàng)建對象統(tǒng)一管理和控制。從而將調(diào)用者跟我們的現(xiàn)實類解耦。
?
簡單工廠:
? ? 1.簡單工廠模式也叫靜態(tài)工廠模式,就是工廠類一般是使用靜態(tài)方法,
通過接收的參數(shù)的不同來返回不同的對象實例。
? ?2.缺點:擴展性非常的差,增加新產(chǎn)品必須修改代碼。
?
??
?
?代碼:
car接口:
public interface Car { void run(); }
?
兩個實現(xiàn)類奧迪和比亞迪:
public class Audi implements Car {
@Override public void run() { ? ?System.out.println("奧迪再跑!"); }
}
?
public class Byd implements Car {
@Override public void run() { System.out.println("比亞迪再跑!"); }
}
工廠類:
//根據(jù)傳入的字符串判斷,是生產(chǎn)奧迪還是比亞迪
public class CarFactory { public static Car createCar(String type){ if("奧迪".equals(type)){ return new Audi(); }else if("比亞迪".equals(type)){ return new Byd(); }else{ return null; } } }
?
調(diào)用者代碼:
public class Client02 { //調(diào)用者 public static void main(String[] args) { Car c1 =CarFactory.createCar("奧迪"); Car c2 = CarFactory.createCar("比亞迪"); c1.run(); c2.run(); } }
?
可以分析出,簡單工廠模式擴展性是非常的差,不符合開閉原則,如果需要新增產(chǎn)品,則需要更改工廠類的代碼。
?
?
工廠模式:
– 完全滿足OCP,擴展性非常的優(yōu)秀。 – 工廠方法模式和簡單工廠模式最大的不同在于,簡單工廠模式只有一個(對于一個項目 或者一個獨立模塊而言)工廠類,而工廠方法模式有一組實現(xiàn)了相同接口的工廠類。

?
代碼如下:
car接口:
public interface Car { void run(); }
?
三個例子,具體的car的實現(xiàn)類: public class Audi implements Car {
@Override public void run() { System.out.println("奧迪再跑!"); }
}
?
public class Benz implements Car {
@Override public void run() { System.out.println("奔馳再跑!"); }
}
?
?
public class Byd implements Car {
@Override public void run() { System.out.println("比亞迪再跑!"); }
}
?
?
car的工廠類接口:?
public interface CarFactory { Car createCar(); }
?
?三個具體實現(xiàn)的工廠:
public class AudiFactory implements CarFactory {
@Override public Car createCar() { return new Audi(); }
}
public class BenzFactory implements CarFactory {
@Override public Car createCar() { return new Benz(); }
}
調(diào)用者類: public class Client { public static void main(String[] args) { Car c1 = new AudiFactory().createCar(); Car c2 = new BydFactory().createCar(); c1.run(); c2.run(); } }
?
簡單工廠模式和工廠方法模式PK:
– 結(jié)構(gòu)復(fù)雜度 從這個角度比較,顯然簡單工廠模式要占優(yōu)。簡單工廠模式只需一個工廠類,而工廠方法模式的工廠類隨著產(chǎn)品類個 數(shù)增加而增加,這無疑會使類的個數(shù)越來越多,從而增加了結(jié)構(gòu)的復(fù)雜程度。 – 代碼復(fù)雜度 代碼復(fù)雜度和結(jié)構(gòu)復(fù)雜度是一對矛盾,既然簡單工廠模式在結(jié)構(gòu)方面相對簡潔,那么它在代碼方面肯定是比工廠方法 模式復(fù)雜的了。簡單工廠模式的工廠類隨著產(chǎn)品類的增加需要增加很多方法(或代碼),而工廠方法模式每個具體工 廠類只完成單一任務(wù),代碼簡潔。 – 客戶端編程難度 工廠方法模式雖然在工廠類結(jié)構(gòu)中引入了接口從而滿足了OCP(開閉原則),但是在客戶端編碼中需要對工廠類進行實例化。而簡 單工廠模式的工廠類是個靜態(tài)類,在客戶端無需實例化,這無疑是個吸引人的優(yōu)點。 – 管理上的難度 這是個關(guān)鍵的問題。 我們先談擴展。眾所周知,工廠方法模式完全滿足OCP,即它有非常良好的擴展性。那是否就說明了簡單工廠模式就 沒有擴展性呢?答案是否定的。簡單工廠模式同樣具備良好的擴展性——擴展的時候僅需要修改少量的代碼(修改工 廠類的代碼)就可以滿足擴展性的要求了。盡管這沒有完全滿足OCP,但我們不需要太拘泥于設(shè)計理論,要知道, sun提供的java官方工具包中也有想到多沒有滿足OCP的例子啊。 然后我們從維護性的角度分析下。假如某個具體產(chǎn)品類需要進行一定的修改,很可能需要修改對應(yīng)的工廠類。當(dāng)同時 需要修改多個產(chǎn)品類的時候,對工廠類的修改會變得相當(dāng)麻煩(對號入座已經(jīng)是個問題了)。反而簡單工廠沒有這些 麻煩,當(dāng)多個產(chǎn)品類需要修改是,簡單工廠模式仍然僅僅需要修改唯一的工廠類(無論怎樣都能改到滿足要求吧?大 不了把這個類重寫)。 · 根據(jù)設(shè)計理論建議:工廠方法模式。但實際上,我們一般都用簡單工廠模式。
?
?
?
? 來源:http://www./content-4-123501.html
|