您的位置:首页 > 编程语言 > Java开发

java设计模式(四)—工厂模式

2015-12-05 22:44 453 查看
1.概念

定义了一个创建对象的接口,但由子类决定你要实例化的类是哪一个。工厂方法让类把实例化延迟到子类。

2.作用

所有的工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。以便得到松耦合,更有弹性的设计。

将一个 orderPizza()方法与工厂方法联合起来,就可以成功一个框架。

工厂方法将生产知识封装进各个创建者,也可以被视为一个框架。

3.设计原则

依赖抽象,而不是具体类。

4.实现方式

4.1 类图



4.2 示例

(1)创建者类

package create;

import product.Pizza;

public abstract  class PizzaStore {

Pizza pizza;

public void orderPizza(String type){
pizza = createPizza(type);
pizza.bake();
pizza.cut();
pizza.box();

}

public abstract Pizza createPizza(String type);

}

package create;

import product.NYStyleCheesePizza;
import product.NYStylePepperoniPizza;
import product.Pizza;

public class NYPizzaStore extends PizzaStore{

@Override

public Pizza createPizza(String type) {
// TODO Auto-generated method stub
if("cheeze".equals(type)){
return new NYStyleCheesePizza();
}
if("pepperoni".equals(type)){
return new NYStylePepperoniPizza();
}else{
return null;
}

}

}


(2) 产品类

package product;

public abstract class Pizza {

public void bake(){
System.out.println("bake");
}
public void cut(){
System.out.println("cut");
}
public void box(){
System.out.println("box");
}
}

package product;

public class NYStyleCheesePizza extends Pizza {

public NYStyleCheesePizza(){

System.out.println("NYStyleCheesePizza");
}

}
package product;

public class NYStylePepperoniPizza extends Pizza {

public NYStylePepperoniPizza(){
System.out.println("NYStylePepperoniPizza");
}
}


(3)测试类

package test;

import create.NYPizzaStore;
import create.PizzaStore;

public class TestFactoryPattern {

public static void main(String[] args) {

PizzaStore nyPizzaStore = new NYPizzaStore();
nyPizzaStore.orderPizza("cheeze");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: