日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【设计模式】-工厂模式->抽象工法模式(源码与类图解析)

發布時間:2023/12/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式】-工厂模式->抽象工法模式(源码与类图解析) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 基本介紹

  • 抽象工廠模式:定義了一個interface用于創建相關或有依賴關系的對象簇,而無需指明具體的類
  • 抽象工廠模式可以將簡單工廠模式和工廠方法模式進行整合。
  • 從設計層面看,抽象工廠模式就是對簡單工廠模式的改進(或者稱為進一步的抽象)。
  • 將工廠抽象成兩層,AbsFactory(抽象工廠) 和 具體實現的工廠子類。程序員可以根據創建對象類型使用對應的工廠子類。這樣將單個的簡單工廠類變成了工廠簇,更利于代碼的維護和擴展。
  • 類圖
  • 二 應用實例

    2.1 Pizza 類

    package com.yqq.pattern.factory.abs.pizza;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/18/20:15* @Description:*/ 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 box() {System.out.println(name + " boxing;");}public void setName(String name) {this.name = name;} }

    2.2 LDPepperPizza 類

    package com.yqq.pattern.factory.abs.pizza;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/19/14:13* @Description:*/ public class LDPepperPizza extends Pizza {public void prepare() {this.setName("倫敦的胡椒披薩");System.out.println("倫敦的胡椒披薩 準備原材料");} }

    2.3 LDCheesePizza類

    package com.yqq.pattern.factory.abs.pizza;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/19/14:13* @Description:*/ public class LDCheesePizza extends Pizza {public void prepare() {this.setName("倫敦的奶酪披薩");System.out.println("倫敦的奶酪披薩 準備原材料");} }

    2.4 BJPepperPizza類

    package com.yqq.pattern.factory.abs.pizza;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/19/14:13* @Description:*/ public class BJPepperPizza extends Pizza {public void prepare() {this.setName("北京的胡椒披薩");System.out.println("北京的胡椒披薩 準備原材料");} }

    2.5 BJCheesePizza類

    package com.yqq.pattern.factory.abs.pizza;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/19/14:13* @Description:*/ public class BJCheesePizza extends Pizza {public void prepare() {this.setName("北京的奶酪披薩");System.out.println("北京的奶酪披薩 準備原材料");} }

    2.6 AbsFactory類

    package com.yqq.pattern.factory.abs.order;import com.yqq.pattern.factory.abs.pizza.Pizza;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/19/23:13* @Description: 抽象工廠模式的抽象接口*/ public interface AbsFactory {//讓下面的工廠子類來具體實現public Pizza createPizza(String orderType); }

    2.7 BJFactory類

    package com.yqq.pattern.factory.abs.order;import com.yqq.pattern.factory.abs.pizza.BJCheesePizza; import com.yqq.pattern.factory.abs.pizza.BJPepperPizza; import com.yqq.pattern.factory.abs.pizza.Pizza;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/19/23:15* @Description:*/ public class BJFactory implements AbsFactory{public Pizza createPizza(String orderType) {Pizza pizza = null;if (orderType.equals("cheese"))pizza = new BJCheesePizza();else if (orderType.equals("pepper"))pizza = new BJPepperPizza();return pizza;} }

    2.8 LDFactory類

    package com.yqq.pattern.factory.abs.order;import com.yqq.pattern.factory.abs.pizza.*;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/19/23:34* @Description:*/ public class LDFactory implements AbsFactory{public Pizza createPizza(String orderType) {Pizza pizza = null;if (orderType.equals("cheese"))pizza = new LDCheesePizza();else if (orderType.equals("pepper"))pizza = new LDPepperPizza();return pizza;} }

    2.9 OrderPizza類

    package com.yqq.pattern.factory.abs.order;import com.yqq.pattern.factory.abs.pizza.Pizza;import java.io.BufferedReader; import java.io.InputStreamReader;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/19/23:35* @Description:*/ public class OrderPizza {AbsFactory factory;public OrderPizza(AbsFactory factory){setAbsFactory(factory);}public void setAbsFactory(AbsFactory factory){Pizza pizza = null;String orderType = "";//用戶輸入this.factory = factory;do {orderType = getType();pizza = factory.createPizza(orderType);if (pizza != null){pizza.prepare();pizza.bake();pizza.cut();pizza.box();}else {System.out.println("訂購失敗");break;}}while (true);}private String getType(){try {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));System.out.println("input pizza 類型:");String line = reader.readLine();return line;}catch (Exception e){e.fillInStackTrace();return null;}} }

    2.10 PizzaStore類(測試)

    package com.yqq.pattern.factory.abs.order;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/19/23:43* @Description:*/ public class PizzaStore {public static void main(String[] args) {new OrderPizza(new LDFactory());} }

    總結

    以上是生活随笔為你收集整理的【设计模式】-工厂模式->抽象工法模式(源码与类图解析)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。