工廠模式是我們開發中用的比較多的設計模式,在spring框架到處可以看得到工廠模式,工廠模式屬于創建型的模式,一種批量創建對象的模式。工廠模式又分為簡單工廠模式和抽象工廠模式。
簡單工廠模式1.簡單工廠模式屬于工廠模式的一種,簡單工廠模式是有一個工廠對象決定創建哪一中產品類的實例。
簡單的工廠模式,定義了一個創建對象的類,這個類來封裝實例化對象的代碼。
在軟件開發中,當我們用到大量的創建某種,某類或者某一批對象時候就會選擇工廠模式。也叫靜態工廠模式。
這里我們引入一個制作pizza例子。來演示一下工廠模式。
這里首先寫一個PIZZA抽象類,prepare方法,各個有所不同需要子類去實現
public abstract class Pizza { protected String name; public abstract void prepare(); public void bake(){ System.out.println(name+"baking"); } public void cut(){ System.out.println(name+"cutting;"); } public void tName(String name) { this.name = name; }}
public class CheePizza extends Pizza{ @Override public void prepare() { System.out.println("給只做奶酪披薩,準備原材料"); }}
public class GreekPizza extends Pizza{ @Override public void prepare() { System.out.println("給只希臘披薩,準備原材料"); }}
public class PepperPizza extends Pizza { @Override public void prepare() { System.out.println("給只做胡椒披薩,準備原材料"); }}
定義一個工廠類,用來創建不同口味的Pizza
public class SimpleFactory { public Pizza createPizza(String orderType){ Pizza pizza = null; System.out.println("使用簡單的工廠模式"); if (orderType.equals("greek")){ pizza = new GreekPizza(); pizza.tName("希臘披薩"); }el if(orderType.equals("chee")) { pizza = new CheePizza(); pizza.tName("奶酪披薩"); }el if(orderType.equals("pepper")){ pizza = new PepperPizza(); pizza.tName("胡椒披薩"); } return pizza; }}
調用方
public class OrderSimPizza { SimpleFactory simpleFactory; Pizza pizza = null; public OrderSimPizza(SimpleFactory factory){ tSimpleFactory(factory); } public void tSimpleFactory(SimpleFactory simpleFactory) { String orderType = simpleFactory.getOrderType(); this.simpleFactory = simpleFactory; pizza = simpleFactory.createPizza(orderType); if (pizza !=null){ pizza.prepare(); pizza.bake(); pizza.cut(); }el{ System.out.println("制造pizza失敗"); } }}
main方法
public static void main(String[] args) { SimpleFactory simpleFactory = new SimpleFactory(); simpleFactory.tOrderType("greek"); new OrderSimPizza(simpleFactory);}
如果新增加一個pizza,我只需要修改一下工廠類即可,這也就實現了增加一個品類了。
工廠方法模式披薩項目的新的需求,客戶在點餐時,可以點不同口味的披薩,比如說北京的奶酪披薩,倫敦奶酪披薩,
如果使用簡單的工廠模式,需要創建不同的工廠類,比如說BJPizzaFactrory ,LDPizzaSimpleFactory等等,從當前的這個案例來說,也是可以的,當時考慮項目的規模和可維護,可擴展性,并不是特別的好,這個時候,就可以考慮工廠方法模式。
所謂的工廠方法模式,將對象的實例化功能抽象成抽象方法,有具體的子類去實現。
工廠方法模式,定義一個創建對象的抽象方法,由子類決定要實例化的類,工廠方法模式將對象實例化推遲到子類。
1.定義一個包含抽象方法的抽象類。
public class BJOrderPizza extends OrderPizza{ public BJOrderPizza(String orderType) { super(orderType); } @Override public Pizza createPizza(String orderType) { Pizza pizza = null; if (orderType.equals("chee")){ pizza = new BJCheePizza(); }el if(orderType.equals("pepper")){ pizza = new BJPapperPizza(); } return pizza; }}
2.定義2個子類去繼承這個抽象方法
public class LDOrderPizza extends OrderPizza { public LDOrderPizza(String orderType) { super(orderType); } @Override public Pizza createPizza(String orderType) { Pizza pizza = null; if (orderType.equals("chee")){ pizza = new LDCheePizza(); }el if(orderType.equals("pepper")){ pizza = new LDPapperPizza(); } return pizza; }}
public class BJOrderPizza extends OrderPizza{ public BJOrderPizza(String orderType) { super(orderType); } @Override public Pizza createPizza(String orderType) { Pizza pizza = null; if (orderType.equals("chee")){ pizza = new BJCheePizza(); }el if(orderType.equals("pepper")){ pizza = new BJPapperPizza(); } return pizza; }}
定義一些具體要實現的類
public class BJCheePizza extends Pizza { @Override public void prepare() { System.out.println("北京的奶酪,準備原材料"); }}
public class BJPapperPizza extends Pizza { @Override public void prepare() { tName("北京的胡椒披薩"); System.out.println("北京的胡椒披薩,準備原材料"); }}
public class LDCheePizza extends Pizza { @Override public void prepare() { tName("倫敦的奶酪披薩"); System.out.println("倫敦的奶酪披薩正在準備中"); }}
public class LDPapperPizza extends Pizza { @Override public void prepare() { tName("倫敦的胡椒披薩"); System.out.println("倫敦的胡椒披薩正在準備中"); }}抽象工廠模式
1.抽象工廠模式,定義一個interface 用于創建相關的或者有依賴關系的對象簇,而無需指明具體的類
2.抽象工廠模式,可以將簡單工廠模式和工廠方法模式進行一個結合
3.從設計層面看,抽象工廠模式就是簡單工廠模式的改進,或者說進一步的抽象。
4.抽象工廠模式,將工廠抽象成2層,AbsFactory和具體實現的子類,程序員可以根據創建類型使用對應的工廠子類。這樣可以將單個簡單的工廠變成工廠簇,更加有利于代碼的維護和擴展。
代碼的實現部分
1.創建一個抽象工廠的接口
public interface AbsFactory { public Pizza createPizza(String orderType);}
2.創建抽象工廠的實現類
public class BJFactory implements AbsFactory{ @Override public Pizza createPizza(String orderType) { Pizza pizza = null; if (orderType.equals("chee")){ pizza = new BJCheePizza(); }el if(orderType.equals("pepper")){ pizza = new BJPapperPizza(); } return pizza; }}
@Overridepublic Pizza createPizza(String orderType) { Pizza pizza = null; if (orderType.equals("chee")){ pizza = new LDCheePizza(); }el if(orderType.equals("pepper")){ pizza = new LDPapperPizza(); } return pizza;}
創建調用方,具體實施要創建的類
public class OrderPizza { private AbsFactory factory; private String orderType; public void tFactory(AbsFactory factory){ this.factory = factory; } public AbsFactory getFactory() { return factory; } public void tOrderType(String orderType) { this.orderType = orderType; Pizza pizza = null; pizza = factory.createPizza(orderType); if (pizza !=null){ pizza.prepare(); pizza.bake(); pizza.cut(); } }}
主方法的入口
public static void main(String[] args) { OrderPizza orderPizza = new OrderPizza(); orderPizza.tFactory(new LDFactory()); orderPizza.tOrderType("chee");}
本文發布于:2023-02-28 21:06:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1677725693103370.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:什么是工廠模式(什么是工廠模式和單例模式).doc
本文 PDF 下載地址:什么是工廠模式(什么是工廠模式和單例模式).pdf
| 留言與評論(共有 0 條評論) |