java工厂方法模式
2014-02-28 22:43
330 查看
工厂方法模式:定义了一个创建对象的接口,但是由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
设计原则:要依赖抽象,不要依赖具体类;
在熟悉工厂模式前,先了解下简单工厂,因为往往把这种编程方法误以为是“工厂模式”;
《head first 设计模式》中的Pizza店卖pizza的设计,如下所示:
具体的代码如下:(因为比较简单就不废话了)class Pizza{
public void preprare(){};
public void bake(){};
public void cut(){};
public void box(){};
}
class SimplePizzaFactory{
public Pizza CreatePizza(String type){
Pizza pizza =null;
if(type.equals("cheese")){
pizza = new CheesePizza();
}else if(type.equals("veggie")){
pizza = new VeggiePizza();
}
return pizza;
}
}
class CheesePizza extends Pizza{
}
class VeggiePizza extends Pizza{
}
public class PizzaStore {
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory){
this.factory = factory;
}
public Pizza orderPizza(String type){
Pizza pizza=factory.CreatePizza(type);
pizza.preprare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
问题出现了,假如虽然都是cheese口味,但是每个地方的做法不一样,那么我们要怎么解决呢?以下方法可以解决:
工厂方法模式:通过子类让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。类图如下所示:
咋看之下,有点纳闷,为什么非要这样呢?跟以往有什么不一样的地方呢?
因为PizzaStore抽象类中的orderPizza()方法中有具体的实现方法,此方法与pizza的具体对象有关;
产品类:
详细代码如下所示:
??简单工厂与工厂方法模式的区别?
答:简单工厂把全部的事情,在一个地方都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。
设计原则:要依赖抽象,不要依赖具体类;
在熟悉工厂模式前,先了解下简单工厂,因为往往把这种编程方法误以为是“工厂模式”;
《head first 设计模式》中的Pizza店卖pizza的设计,如下所示:
具体的代码如下:(因为比较简单就不废话了)class Pizza{
public void preprare(){};
public void bake(){};
public void cut(){};
public void box(){};
}
class SimplePizzaFactory{
public Pizza CreatePizza(String type){
Pizza pizza =null;
if(type.equals("cheese")){
pizza = new CheesePizza();
}else if(type.equals("veggie")){
pizza = new VeggiePizza();
}
return pizza;
}
}
class CheesePizza extends Pizza{
}
class VeggiePizza extends Pizza{
}
public class PizzaStore {
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory){
this.factory = factory;
}
public Pizza orderPizza(String type){
Pizza pizza=factory.CreatePizza(type);
pizza.preprare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
问题出现了,假如虽然都是cheese口味,但是每个地方的做法不一样,那么我们要怎么解决呢?以下方法可以解决:
工厂方法模式:通过子类让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。类图如下所示:
咋看之下,有点纳闷,为什么非要这样呢?跟以往有什么不一样的地方呢?
因为PizzaStore抽象类中的orderPizza()方法中有具体的实现方法,此方法与pizza的具体对象有关;
产品类:
详细代码如下所示:
abstract class PizzaStore { public Pizza orderPizza(String type){ Pizza pizza=CreatePizza(type); pizza.preprare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } public abstract Pizza CreatePizza(String type); } class NYPizzaStore extends PizzaStore{ @Override public Pizza CreatePizza(String type) { // TODO Auto-generated method stub Pizza pizza =null; if(type.equals("cheese")){ pizza = new NYCheesePizza(); }else if(type.equals("veggie")){ pizza = new NYVeggiePizza(); } return pizza; } } abstract class Pizza{ String name; String dough; String sauce; public void preprare(){ System.out.println(name+dough+sauce); } public void bake(){ System.out.println("Bake for 25 minutes"); } public void cut(){ System.out.println("has been cut"); } public void box(){ System.out.println("has placed pizza in box"); } } class NYVeggiePizza extends Pizza{ public NYVeggiePizza(){ name = "NY style Veggie"; dough = "Thin"; sauce = "Marinara"; } } class NYCheesePizza extends Pizza{ public NYCheesePizza(){ name = "NY style Cheese"; dough = "Thin"; sauce = "Marinara"; } }
??简单工厂与工厂方法模式的区别?
答:简单工厂把全部的事情,在一个地方都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。
相关文章推荐
- Factory Method Pattern(工厂方法模式)——莫勇鹏老师
- 创建型模式之工厂方法模式
- 工厂方法模式
- Java设计模式之工厂方法模式
- 设计模式之工厂方法模式(Factory Method)
- 设计模式---工厂方法模式(Factory Method Pattern)
- 设计模式之工厂方法模式
- 工厂方法模式的适用环境
- PHP设计模式——工厂方法模式(研磨设计模式学习笔记)
- 工厂方法模式 C++描述
- (4)设计模式方法-创建型设计模式--:简单工厂模式【【【工厂方法模式
- java工厂方法模式
- Java与设计模式(02)--工厂方法模式
- 三种工厂模式的优劣比较
- 雷锋依然在人间 --- 工厂方法模式
- 设计模式之工厂方法模式
- (二)工厂方法模式
- c++设计模式—工厂方法模式
- 工厂方法模式
- 设计模式系列-工厂方法模式 推荐