工廠模式按照對類的抽象程度可以劃分為如下三種型別
1)簡單工廠模式(****** factory)
2)工廠方法模式(factory method)
3)抽象工廠模式(abstract factory)
簡單工廠:
定義:是由乙個工廠物件決定建立出哪一種產品類的例項。
簡單工廠模式中包含的角色及其相應的職責如下:
//抽象產品
abstract class car
public void setname(string name)
}//具體產品
class benz extends car
}//具體產品
class bmw extends car
}//簡單工廠
class drive
}//老闆(客戶端)
public class boss
}
使用簡單工廠模式的優勢:讓物件的呼叫者和物件建立過程分離,當物件呼叫者需要物件時,直接向工廠請求即可。從而避免了物件的呼叫者與物件的實現類以硬編碼方式耦合,以提高系統的可維護性、可擴充套件性。工廠模式也有乙個小小的缺陷:當產品修改時,工廠類也要做相應的修改,違反了開-閉原則。如上例,需要增加 奧迪 時,需要修改工廠類 driver
簡單工廠模式適用於業務簡單的情況下或者具體產品很少增加的情況。而對於複雜的業務環境可能不太適應了。這就應該由工廠方法模式來出場了!!
工廠方法:
不在工廠類中進行邏輯判斷,程式可以為不同產品類提供不同的工廠,不同的工廠類和產不同的產品。當使用工廠方法設計模式時,物件呼叫者需要與具體的工廠類耦合
類圖:
//抽象產品
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
}
使用開閉原則來分析下工廠方法模式。當有新的產品產生時,只要按照抽象產品角色、抽象工廠角色提供的合同來生成,那麼就可以被客戶使用,而不必去修改任何已有的**。(即當有新產品時,只要建立並基礎抽象產品;新建具體工廠繼承抽象工廠;而不用修改任何乙個類)工廠方法模式是完全符合開閉原則的!
抽象工廠模式:
先來認識下什麼是產品族: 位於不同產品等級結構中,功能相關聯的產品組成的家族。
舉個例子海爾可以生產冰箱、彩電、和空調。那麼冰箱就是乙個產品族。
在以下類圖中productc和productd是處於同一產品族,producta和productb是處於同一產品等級。
抽象工廠滿足條件:
角色
//抽象產品(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
}
三種模式的對比:
三種工廠模式使用要視情況而定,假如寫個hello world 完全沒有必要使用抽象工廠模式,使用工廠模式的根本目的是為了降低程式的耦合性從而應對客戶需求的變化。
若有不周之處還望讀者多多指正
常用設計模式
簡單工廠 工廠方法 和抽象工廠區別
簡單工廠 factory pattern 簡單工廠模式,把物件 統一介面 的建立封裝起來,而不去用了解物件所代表的真正的實現類及其初始化過程。我們只需要把引數傳遞給簡單工廠,工廠就會根據你的需要返回相應的產品物件。示例 如下 對不同的產品的例項化,由不同的工廠來實現,每一種工廠都是生產特定的產品。但...
簡單工廠,工廠方法與抽象工廠區別體會
設計模式作為程式設計師的內功心法,相信每個寫過oop 的都不會陌生,不過有些模式之間既有區別,又有聯絡,我們來看看簡單工廠,工廠方法與抽象工廠的區別和聯絡。一 簡單工廠 簡單工廠模式中工廠為具體工廠,產品為抽象產品,由工廠例項建立產品例項。二 工廠方法 工廠方法中有抽象的工廠類,一種抽象的產品類,而...
工廠方法和抽象工廠區別
簡單工廠 簡單工廠沒有抽象類,只有乙個具體工廠類如myfactory,myfactory裡面有個工廠方法createproduct返回乙個基類產品,具體返回什麼例項通過傳入引數判斷。用手機生產做個例子 比如nokia簡單工廠就是只有nokiafactory工廠類,工廠方法就是createnokiap...