前面我們介紹了簡單工廠模式,知道了簡單工廠模式不容易擴充套件,在產品型別比較多的情況下,工廠模式在一定程度上解決了不易擴充套件的問題,每種商品都有乙個特定的工廠負責生產,並且這個工廠只負責生產一種商品
product:產品介面,定義產品的共有行為
concreteproduct:具體產品,定義產品的具體屬性和行為
factory:抽象工廠,定義工廠的共有行為
concretefactory:具體工廠,定義工廠的具體行為
接下來我們將上次的例子改為工廠模式,即工廠負責生產火麒麟、雷神兩把**
product介面:
package factory;
/** *
* @author lzy
*/public inte***ce product
thor類:
package factory;
/** *
* @author lzy
*/public class thor implements product
public float getpower()
public float getweight()
@override
public void buy()
}
fire_kirin類:
package factory;
/** *
* @author lzy
*/public class fire_kirin implements product
public float getpower()
public float getweight()
@override
public void buy()
}
factory介面:
package factory;
/** *
* @author lzy
*/public inte***ce factory
fire_kirin_factory類:
package factory;
/** *
* @author lzy
*/public class fire_kirin_factory implements factory
}
thor_factory類:
package factory;
/** *
* @author lzy
*/public class thor_factory implements factory
}
main:
package factory;
/** *
* @author lzy
* */
public class main
}
執行結果:
優點:工廠模式不同於簡單工廠模式,很好的滿足了開閉原則,當我們想要新增乙個產品時,不用修改現有的類**,只需要新增乙個產品類和對應的工廠類即可
缺點:每個工廠只能生產一種產品,不能同時生產多種,當產品數量增多時,工廠檔案可能就會非常非常的多,當產品數量不多時,簡單工廠又能較好的滿足,所以工廠模式處於稍微有點尷尬的狀態
另外一點是為什麼工廠和產品都要定義一組介面呢?似乎沒有介面,也能很好的滿足開閉原則
這裡先來說說自己對介面的一點理解:
使用介面可以提高**的封裝性,隱藏一些**實現的細節,閱讀一些原始碼時就會發現,介面真的能隱藏**實現的細節,除了提供封裝性外,使用介面可以使**結構更加規範,不使用介面,**結構可能就是這樣的:
當類的數目多起來時,**結構就會非常的亂,如果使用介面:
當類數目多起來時,合理的使用介面,可以讓**結構更加清晰,相當於對所有的類進行了分類,同時閱讀介面,大致上就可以知道這些類的公有特性,所以在設計模式中,當類的數目多起來時,我們總可以看到介面的身影,包括工廠模式
除了上述幾點,介面還有乙個目的是為了實現多繼承
如有錯誤,歡迎指出
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...
設計模式 工廠設計模式
用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...
設計模式 工廠設計模式
工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...