<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們仍然以上一篇文章的案例為主,畫出抽象工廠模式下的類圖。
首先仍然是Pizza種類相關的幾個類。
package com.szh.factory.abstractfactory.pizza; /** * 宣告Pizza類為抽象類 */ public abstract class Pizza { //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 box() { System.out.println(name + " boxing;"); } public void setName(String name) { this.name = name; } }
package com.szh.factory.abstractfactory.pizza; public class LDPepperPizza extends Pizza { @Override public void prepare() { setName("倫敦的胡椒pizza"); System.out.println("倫敦的胡椒pizza 準備原材料"); } }
package com.szh.factory.abstractfactory.pizza; public class LDCheesePizza extends Pizza { @Override public void prepare() { setName("倫敦的乳酪pizza"); System.out.println("倫敦的乳酪pizza 準備原材料"); } }
package com.szh.factory.abstractfactory.pizza; public class BJPepperPizza extends Pizza { @Override public void prepare() { setName("北京的胡椒pizza"); System.out.println("北京的胡椒pizza 準備原材料"); } }
package com.szh.factory.abstractfactory.pizza; public class BJCheesePizza extends Pizza { @Override public void prepare() { setName("北京的乳酪pizza"); System.out.println("北京的乳酪pizza 準備原材料"); } }
下面是抽象工廠和工廠方法的區別之處。
package com.szh.factory.abstractfactory.order; import com.szh.factory.abstractfactory.pizza.Pizza; //一個抽象工廠模式的抽象層(介面) public interface AbsFactory { //讓下面的工廠子類來具體實現 public Pizza createPizza(String orderType); }
package com.szh.abstractfactory.order; import com.szh.abstractfactory.pizza.BJCheesePizza; import com.szh.abstractfactory.pizza.BJPepperPizza; import com.szh.abstractfactory.pizza.Pizza; public class BJFactory implements AbsFactory { @Override public Pizza createPizza(String orderType) { Pizza pizza = null; if("cheese".equals(orderType)) { pizza = new BJCheesePizza(); } else if ("pepper".equals(orderType)){ pizza = new BJPepperPizza(); } return pizza; } }
package com.szh.abstractfactory.order; import com.szh.abstractfactory.pizza.LDCheesePizza; import com.szh.abstractfactory.pizza.LDPepperPizza; import com.szh.abstractfactory.pizza.Pizza; public class LDFactory implements AbsFactory { @Override public Pizza createPizza(String orderType) { Pizza pizza = null; if ("cheese".equals(orderType)) { pizza = new LDCheesePizza(); } else if ("pepper".equals(orderType)) { pizza = new LDPepperPizza(); } return pizza; } }
package com.szh.factory.abstractfactory.order; import com.szh.factory.abstractfactory.pizza.Pizza; import java.util.Scanner; public class OrderPizza { AbsFactory absFactory; public OrderPizza(AbsFactory absFactory) { setFactory(absFactory); } private void setFactory(AbsFactory absFactory) { Pizza pizza = null; String orderType = ""; // 使用者輸入 this.absFactory = absFactory; do { orderType = getType(); // factory 可能是北京的工廠子類,也可能是倫敦的工廠子類 pizza = absFactory.createPizza(orderType); if (pizza != null) { // 訂購ok pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); } else { System.out.println("訂購失敗"); break; } } while (true); } // 寫一個方法,可以獲取客戶希望訂購的披薩種類 private String getType() { Scanner scanner = new Scanner(System.in); System.out.println("請輸入 pizza 種類: "); String str = scanner.nextLine(); return str; } }
最後是測試類。
package com.szh.abstractfactory; import com.szh.abstractfactory.order.BJFactory; import com.szh.abstractfactory.order.LDFactory; import com.szh.abstractfactory.order.OrderPizza; import java.util.Scanner; public class MainTest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String content = scanner.next(); if ("Beijing".equals(content)) { new OrderPizza(new BJFactory()); } else if ("London".equals(content)) { new OrderPizza(new LDFactory()); } else { System.out.println("無法預先匹配Pizza種類...."); scanner.close(); } } }
到此這篇關於Java 深入理解建立型設計模式之抽象工廠模式的文章就介紹到這了,更多相關Java 抽象工廠模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45