【设计模式】-工厂模式->抽象工法模式(源码与类图解析)
生活随笔
收集整理的這篇文章主要介紹了
【设计模式】-工厂模式->抽象工法模式(源码与类图解析)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 基本介紹
二 應用實例
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());} }總結
以上是生活随笔為你收集整理的【设计模式】-工厂模式->抽象工法模式(源码与类图解析)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: udt源码整理
- 下一篇: 基于VPB的三维地形建模小结