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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

一 需求

披薩項目新的需求:客戶在點披薩時,可以點不同口味的披薩,比如 北京的奶酪pizza、北京的胡椒pizza 或者是倫敦的奶酪pizza、倫敦的胡椒pizza。

1.1 思路1

使用簡單工廠模式,創建不同的簡單工廠類,比如BJPizzaSimpleFactory、
LDPizzaSimpleFactory 等等.從當前這個案例來說,也是可以的,但是考慮到項目的規模,以及軟件的可維護性、可擴展性并不是特別好

1.2 思路2

使用工廠方法模式

二 工廠方法模式

2.1 工廠方法模式介紹

  • 工廠方法模式設計方案:將披薩項目的實例化功能抽象成抽象方法,在不同的口味點餐子類中具體實現。
  • 工廠方法模式:定義了一個創建對象的抽象方法,由子類決定要實例化的類。工廠方法模式將對象的實例化推遲到子類。
  • 三 案例

    披薩項目新的需求:客戶在點披薩時,可以點不同口味的披薩,比如 北京的奶酪pizza、北京的胡椒pizza 或者是倫敦的奶酪pizza、倫敦的胡椒pizza

    3.1 Pizza類

    package com.yqq.pattern.factory.method.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;} }

    3.2 LDPepperPizza類

    package com.yqq.pattern.factory.method.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("倫敦的胡椒披薩 準備原材料");} }

    3.3 LDCheesePizza類

    package com.yqq.pattern.factory.method.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("倫敦的奶酪披薩 準備原材料");} }

    3.4 BJPepperPizza類

    package com.yqq.pattern.factory.method.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("北京的胡椒披薩 準備原材料");} }

    3.5 BJCheesePizza類

    package com.yqq.pattern.factory.method.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("北京的奶酪披薩 準備原材料");} }

    3.6 OrderPizza類

    package com.yqq.pattern.factory.method.order;import com.yqq.pattern.factory.method.pizza.Pizza; import com.yqq.pattern.factory.simple.order.SimpleFactory;import java.io.BufferedReader; import java.io.InputStreamReader;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/18/22:08* @Description: 使用方*/ public abstract class OrderPizza {//構造器public OrderPizza(){Pizza pizza = null;String orderType;//訂購披薩的類型do {orderType = getType();pizza = createPizza(orderType);//抽象方法,由工廠子類自己實現//輸出pizza,制作過程pizza.prepare();pizza.bake();pizza.cut();pizza.box();}while (true);}//定義一個抽象方法,讓各個工廠子類自己實現abstract Pizza createPizza(String orderType);//寫一個方法,可以獲取客戶希望訂購的披薩種類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;}} }

    3.7 LDOrderPizza類

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

    3.8 BJOrderPizza類

    package com.yqq.pattern.factory.method.order;import com.yqq.pattern.factory.method.pizza.BJCheesePizza; import com.yqq.pattern.factory.method.pizza.BJPepperPizza; import com.yqq.pattern.factory.method.pizza.Pizza;/*** Created with IntelliJ IDEA.** @Author: yqq* @Date: 2022/08/19/14:34* @Description:*/ public class BJOrderPizza extends OrderPizza{Pizza createPizza(String orderType) {Pizza pizza = null;if (orderType.equals("cheese"))pizza = new BJCheesePizza();else if (orderType.equals("pepper"))pizza = new BJPepperPizza();return pizza;} }

    3.9 PizzaStore類(測試)

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

    總結

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

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