Head First设计模式-简单工厂模式
来源:互联网 发布:surface studio 知乎 编辑:程序博客网 时间:2024/05/16 09:22
开始之前,先讲下java直接new一个对象
Pizza pizza = new CheesePizza(); ;
对象pizza使用了接口,是代码更具有弹性,但是CheesePizza还是建立了具体的类,当有一群具体的类,如:
- Pizza pizza = null;
- if (type.equals("cheese")) {
- pizza = new CheesePizza();
- } else if (type.equals("pepperoni")) {
- pizza = new PepperoniPizza();
- }
面向接口编程
面向接口编程,可以隔离掉以后系统可能发生的改变。如果代码使用具体的类,就要修改代码。也就是非“对修改关闭”。当要扩展时,就必须打开它。所以要回到OO设计原则,找到变化的方面,把它们从不变的部分分离出来。
一、简单工厂模式
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 ingredients StringBuffer 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;
因为此部分是变化的,简单工厂模式封装了变化。实现了松耦合。
0 0
- 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)---工厂模式
- 数组中查找第k小元素的复杂度为O(n)的算法
- 简单的 随机 生成不重复 数字的小程序
- 编程巨星的唯一秘诀
- Spring Security教程(大纲)----学习过程分享
- 序言
- Head First设计模式-简单工厂模式
- 第八章 采用PCA(主成分分析)或LDA(线性判别分析)的人脸识别(二)
- Spring Security教程(1)----SpringSecurity3.2环境搭建
- Java 自动装箱和拆箱
- 分享C++基础和MFC编程的优秀学习资料
- Spring Security教程(2)----SpringSecurity简单测试
- Lua在Linux下的安装
- Spring Security教程(3)---- 自定义登录页面
- HDU 1042