Head First设计模式学习笔记-------(4.1)工厂模式
来源:互联网 发布:js amd cmd规范 编辑:程序博客网 时间:2024/06/05 22:33
这一章将给大家带来一个有趣的模式------工厂模式
开始先给大家看一个简单的例子:
如果按照上面的设计方式,那么当你需要修改比萨类型时,就需要修改这个文件的代码了,但是你发现,下面的比萨处理方式是不会改变的,那能不能把下面部分的代码分离出来呢,我们来试试看。
我们把分离出来的代码生成一个新的对象,这个新对象就被称为“工厂”,工厂处理创建对象的细节。
下面我们来看看这个我们创建的简单工厂的具体代码。
SimplePizzaFactory类:
public class SimplePizzaFactory { //这个就是我们自己定义的工厂类public Pizza createPizza(String type) { //这个工厂内定义一个createPizza()方法。所有用户用这个方法来实例化新对象。Pizza pizza = null;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;}}PizzaStore类:
public class PizzaStore {SimplePizzaFactory factory; //现在我们为PizzaStore加上一个对SimplePizzaFactory的引用public PizzaStore(SimplePizzaFactory factory) {this.factory = factory; //PizzaStore的构造器,需要一个工厂作为参数}public Pizza orderPizza(String type) {Pizza pizza;pizza = factory.createPizza(type); //orderPizza方法通过简单传入订单类型来使用工厂创建比萨pizza.prepare();pizza.bake();pizza.cut();pizza.bos();return pizza;}}这样以来,一个简单工厂的例子就大致写完了,是不是很简单,什么?你问工厂模式就是这个吗? 当然不是,而且简单工厂并不是一个设计模式,到可以说是一种编程习惯。
前面的简单工厂只是让大家先熟悉下工厂这个概念,接下来要进入主题了--------工厂模式
比萨店越开越大,有许多地方都想开加盟店,但是不同地方的口味和比萨处理方式都不一样,这该怎么办呢,相比大家都有办法了吧,对,就是把PizzaStore定义为超类,我们来看下新设计的类图吧。
看了类图,再让我们看看处理一个订单的流程吧,让我们更加了解这个系统的流程。
好了,类图和流程都看完了,终于可以代码实现了。
Pizza类:
import java.util.ArrayList;public class Pizza {String name; String dough;String sauce;ArrayList toppings = new ArrayList();void prepare() {System.out.println("Preparing " + name);System.out.println("Tossing dough");System.out.println("Adding sauce");System.out.println("Adding toppings: ");for (int i = 0; i < toppings.size(); i++) {System.out.println(" " + toppings.get(i));}}void bake() {System.out.println("Bake for 25 minutes at 350");}void cut() {System.out.println("Cutting the pizza into diagonal slices");}void box() {System.out.println("Place pizza in official PizzaStore bos");}public String getName() {return name;}}NYStyleCheesePizza类:
public class NYStyleCheesePizza extends Pizza{public NYStyleCheesePizza() {name = "NY Style Sauce and Cheese Pizza";dough = "Thin Crust Dough";sauce = "Marinara Sauce";toppings.add("Grated Reggiano Cheese");}}认识工厂方法模式的时刻终于到了
工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
0 0
- Head First设计模式学习笔记-------(4.1)工厂模式
- Head First 设计模式学习笔记(4)---工厂模式
- 《Head first设计模式》学习笔记 - 工厂方法模式
- 《Head first设计模式》学习笔记 - 抽象工厂模式
- 《Head first设计模式》学习笔记 – 工厂方法模式
- 《Head first设计模式》学习笔记 – 抽象工厂模式
- 《Head first设计模式》学习笔记 – 工厂方法模式
- 《Head first设计模式》学习笔记 – 抽象工厂模式
- 【head first 设计模式学习笔记】工厂模式
- Head First设计模式笔记(工厂方法模式)
- Head First设计模式学习笔记(5)---抽象工厂模式
- 《Head.First设计模式》的学习笔记(5)--工厂方法模式
- Head First设计模式学习笔记-------(4.2)抽象工厂模式
- 《Head First 设计模式》学习笔记——工厂模式 + 抽象工厂模式
- Head First设计模式学习笔记(8)---适配器模式
- Head First设计模式学习笔记-------(1)策略模式
- Head First设计模式学习笔记-------(2)观察者模式
- Head First设计模式学习笔记-------(5)单体模式
- 常见的嵌入式linux学习和如何选择ARM芯片问答
- poj 1029趣味枚举
- POJ 1260-Pearls(DP-买珍珠)
- PHP面向对象之旅:一个接口实例,很好的例子
- react-native-router-flux 使用详解(一)
- Head First设计模式学习笔记-------(4.1)工厂模式
- (ssl1458)数字金字塔(三角形)顺推一个数组法(好长的名字Σ( ° △ °|||)︴)
- ftp上传文件
- c++拉普拉斯锐化
- 决策树
- [java数据结构]--java双向链表LinkedList的简单实现
- Python描述器引导(翻译)
- eclipse 中 svn 更新与同步资源库
- Ext.js 面向对象特性