设计模式:抽象工厂

Pizza
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public abstract class Pizza { // 披萨名称 private String pizzaName; /** * 披萨准备工作 */ public abstract void prepare(); public void bake() { System. out .println(pizzaName + "正在烘烤" ); } public void cut() { System. out .println(pizzaName + "正在剪切" ); } public void pack() { System. out .println(pizzaName + "正在打包" ); } public void setPizzaName(String pizzaName) { this .pizzaName = pizzaName; } } |
BJCheesePizza
1 2 3 4 5 6 7 | public class BJCheesePizza extends Pizza{ @Override public void prepare() { setPizzaName( "北京奶酪披萨" ); System. out .println( "北京奶酪披萨正在准备中" ); } } |
BJPepperPizza
1 2 3 4 5 6 7 | public class BJPepperPizza extends Pizza { @Override public void prepare() { setPizzaName( "北京胡椒披萨" ); System. out .println( "北京胡椒披萨正在准备中" ); } } |
LDCheesePizza
1 2 3 4 5 6 7 | public class LDCheesePizza extends Pizza { @Override public void prepare() { setPizzaName( "伦敦奶酪披萨" ); System. out .println( "伦敦奶酪披萨正在准备中" ); } } |
LDPepperPizza
1 2 3 4 5 6 7 | public class LDPepperPizza extends Pizza{ @Override public void prepare() { setPizzaName( "伦敦胡椒披萨" ); System. out .println( "伦敦胡椒披萨正在准备中" ); } } |
AbsFactory
1 2 3 4 5 6 7 8 9 10 | public interface AbsFactory { /** * 创建pizza * @param pizzaType 披萨类型 * @return 需要创建的pizza */ Pizza createPizza(String pizzaType); } |
BJFactory
1 2 3 4 5 6 7 8 9 10 11 | public class BJFactory implements AbsFactory{ @Override public Pizza createPizza(String pizzaType) { if ( "cheese" . equals (pizzaType)) { return new BJCheesePizza(); } else if ( "pepper" . equals (pizzaType)) { return new BJPepperPizza(); } return null ; } } |
LDFactory
1 2 3 4 5 6 7 8 9 10 11 | public class LDFactory implements AbsFactory { @Override public Pizza createPizza(String pizzaType) { if ( "cheese" . equals (pizzaType)) { return new LDCheesePizza(); } else if ( "pepper" . equals (pizzaType)) { return new LDCheesePizza(); } return null ; } } |
OrderPizza
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | public class OrderPizza { public OrderPizza(AbsFactory factory) { handlerPizza(factory); } private void handlerPizza(AbsFactory factory) { do { String pizzaType = getPizzaType(); Pizza pizza = factory.createPizza(pizzaType); if (Objects.nonNull(pizza)) { pizza.prepare(); pizza.bake(); pizza.cut(); pizza.pack(); } else { System. out .println( "输入的pizza目前不支持制作,请等待" ); break ; } } while ( true ); } /** * 获取要制作的pizza * * @return pizza种类 */ private String getPizzaType() { BufferedReader reader = new BufferedReader( new InputStreamReader(System. in )); try { System. out .print( "请输入要订购的披萨:" ); String pizzaType = reader.readLine(); System. out .println( "要订阅的pizza种类:" + pizzaType); return pizzaType; } catch (IOException e) { e.printStackTrace(); return "" ; } } } |
PizzaStore
1 2 3 4 5 6 | public class PizzaStore { public static void main(String[] args) { // new OrderPizza(new LDFactory()); new OrderPizza( new BJFactory()); } } |
标签:
设计模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!