【设计模式】-工厂模式->工厂方法模式(源码与类图解析)
生活随笔
收集整理的這篇文章主要介紹了
【设计模式】-工厂模式->工厂方法模式(源码与类图解析)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 需求
披薩項目新的需求:客戶在點披薩時,可以點不同口味的披薩,比如 北京的奶酪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();} }總結
以上是生活随笔為你收集整理的【设计模式】-工厂模式->工厂方法模式(源码与类图解析)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鞍山市2021中高考成绩查询,2021年
- 下一篇: DVWA-XSS (Reflected)