Head First设计模式-简单工厂模式
来源:互联网 发布:淘宝拍卖的画是真的吗 编辑:程序博客网 时间:2024/05/16 04:44
一、简单工厂模式
PizzaStore.java
public class PizzaStore { SimplePizzaFactory factory;//多用组合,少用继承 public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza orderPizza(String type) { Pizza pizza; pizza = factory.createPizza(type); pizza.prepare(); pizza.bake();//面向接口编程 pizza.cut(); pizza.box(); return pizza; }}
SimplePizzaFactory.java
public class SimplePizzaFactory { public Pizza createPizza(String type) { Pizza pizza = null; if (type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); } return pizza; }}
Pizza.java
import java.util.ArrayList;abstract public class Pizza {String name;String dough;String sauce;ArrayList toppings = new ArrayList();public String getName() {return name;}public void prepare() {System.out.println("Preparing " + name);}public void bake() {System.out.println("Baking " + name);}public void cut() {System.out.println("Cutting " + name);}public void box() {System.out.println("Boxing " + name);}public String toString() {// code to display pizza name and ingredientsStringBuffer display = new StringBuffer();display.append("---- " + name + " ----\n");display.append(dough + "\n");display.append(sauce + "\n");for (int i = 0; i < toppings.size(); i++) {display.append((String )toppings.get(i) + "\n");}return display.toString();}}
CheesePizza.java
public class CheesePizza extends Pizza { public CheesePizza() { name = "Cheese Pizza"; dough = "Regular Crust"; sauce = "Marinara Pizza Sauce"; toppings.add("Fresh Mozzarella"); toppings.add("Parmesan"); }}
PepperoniPizza.java
public class PepperoniPizza extends Pizza { public PepperoniPizza() { name = "Pepperoni Pizza"; dough = "Crust"; sauce = "Marinara sauce"; toppings.add("Sliced Pepperoni"); toppings.add("Sliced Onion"); toppings.add("Grated parmesan cheese"); }}
PizzaTestDrive.java
public class PizzaTestDrive { public static void main(String[] args) { SimplePizzaFactory factory = new SimplePizzaFactory(); PizzaStore store = new PizzaStore(factory); Pizza pizza = store.orderPizza("cheese"); System.out.println("We ordered a " + pizza.getName() + "\n"); pizza = store.orderPizza("pepperoni"); System.out.println("We ordered a " + pizza.getName() + "\n"); }}
二、结果如下:
三、原来creatPizza的位置代码如下:
if (type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); } else if (type.equals("clam")) { pizza = new ClamPizza(); } else if (type.equals("veggie")) { pizza = new VeggiePizza(); } return pizza;
因为此部分是变化的,简单工厂模式封装了变化。实现了松耦合。
- Head First设计模式-简单工厂模式
- Head First设计模式-简单工厂模式
- 《Head First 设计模式》之简单工厂
- Head First设计模式-工厂模式
- Head First设计模式-抽象工厂模式
- 《Head First 设计模式》工厂模式
- Head First设计模式-抽象工厂模式
- 《Head First 设计模式》之工厂模式
- Head First 设计模式 --工厂模式
- Head First设计模式之工厂模式
- Head First-设计模式:工厂模式
- Head First 设计模式学习——简单工厂方法-工厂方法模式-抽象工厂模式
- Head First---工厂模式
- Head First 工厂模式
- 简单工厂模式(head first读书笔记)
- head first 设计模式学习之 简单工厂,工厂方法和抽象工厂
- <Head First 设计模式>:工厂模式1:方法模式--Pizza
- Head First 设计模式学习笔记(4)---工厂模式
- eclipse在启动的时候卡住很久的解决办法
- 【Rails】再探RESTfull路由规则与具名路由
- vim学习笔记(一)
- 通讯也“跨界”:几行代码,API+SDK,用PaaS实现移动互联
- Java创建WebService服务及客户端实现
- Head First设计模式-简单工厂模式
- 解决yum错误:Cannot retrieve repository metadata (repomd.xml) for repository
- Oracle与MySQL的几点区别
- MyBatis与Spring整合(一)
- 加密 DB2 Universal Database 中的数据值
- Unity3D 模型换肤技术
- 正则表达式
- Android禁止横屏竖屏切换
- 基于朴素贝叶斯分类器的文本分类算法(上)