工厂模式
来源:互联网 发布:自动拨号软件 编辑:程序博客网 时间:2024/06/04 18:52
一、概述
定义:工厂模式定义了一个创建产品对象的接口,由子类决定要实例化的是哪一个具体的产品类。工厂模式是代替new操作的一种模式。
类图:
工厂模式封装具体类型的实例化,抽象的Creator具有工厂方法,它的任何子类都要实现该方法,由这些子类负责创建实例。
二、具体例子
场景描述:一个做pizza的商家具有多家pizza连锁店,每个店都能生产pizza,为了讨好不同地区顾客的口味,同一名字的pizza做法也有差别。商店需要用同一套售卖系统。
根据描述,开始设计需要用到的类,需要一个PizzaStore(代表类图中的Creator), APizzaStore(代表ConcreteCreator,A地区的店),BpizzaStore(B地区的店),Pizza(代表Product)以及一些不同具体pizza类(代表ConcreteProduct)。
类图:
代码:
public class Pizza { protected String name; protected String dough; //面粉类型 protected String sauce; //调味酱汁 public void prepare() { //做pizza的一些事前准备 } public void bake() { System.out.println("Bake for 25 minutes"); } public void cut() { System.out.println("Cutting the pizza"); } public void box() { System.out.println("Place pizza in box"); } public String getName() { return name; }}
public class ACheesePizza extends Pizza { public ACheesePizza() { name = "A area style Cheese Pizza"; //A地区风味的Cheese Pizza dough = "xxx"; sauce = "yyy"; }}public class AClamPizza extends Pizza{ public AClamPizza() { name = "A area style Clam Pizza"; //A地区风味的Clam Pizza dough = "xxx"; sauce = "yyy"; }}public class BCheesePizza extends Pizza { public BCheesePizza() { name = "B area style Cheese Pizza"; //B地区风味的Cheese Pizza dough = "xxx"; sauce = "yyy"; } @Override public void bake() { System.out.println("Bake for 20 minutes"); //烤20分钟 }}public class BClamPizza extends Pizza { public BClamPizza() { name = "B area style Clam Pizza"; //B地区风味的Clam Pizza dough = "xxx"; sauce = "yyy"; }}
public abstract class PizzaStore { public Pizza orderPizza(String type) { Pizza pizza; pizza = createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } protected abstract Pizza createPizza(String type);//工厂方法}public class APizzaStore extends PizzaStore { @Override protected Pizza createPizza(String type) { if (type.equals("cheese")) { return new ACheesePizza(); } else if (type.equals("clam")) { return new AClamPizza(); } return null; }}public class BPizzaStore extends PizzaStore { @Override protected Pizza createPizza(String type) { if (type.equals("cheese")) { return new BCheesePizza(); } else if (type.equals("clam")) { return new BClamPizza(); } return null; }}
运行:
public static void main(String[] args) { PizzaStore aPizzaStore = new APizzaStore(); PizzaStore bPizzaStore = new BPizzaStore(); Pizza aCheesePizza = aPizzaStore.orderPizza("clam"); System.out.println("name : " + aCheesePizza.getName() + "\n"); Pizza bClamPizza = bPizzaStore.orderPizza("cheese"); System.out.println("name : "+ bClamPizza.getName() + "\n"); }
阅读全文
0 0
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 工厂模式:静态工厂
- 工厂模式-简单工厂
- 工厂模式-抽象工厂
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-静态工厂
- 工厂模式-抽象工厂
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- Rust: &,clone,Box,Arc 的address
- EasyPlayer RTSP播放器:一个适用于安防行业的工具利器(EasyPlayer Windows v2.0.17.0709)
- Android View — Paint 详解
- JavaScript对象的获取以及字符串的基本应用
- 学linux的第二天
- 工厂模式
- 谈谈学习java的感受!
- linux系统学习
- Android 检测手机多点触摸点数
- 单点触摸
- HTC Vive VRTK入门之瞬移自定义瞬时指针(桃花源游记)
- STM32的时钟系统
- 检测手机多点触摸事件
- Protobuf的快速使用篇