简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例
举一个例子,现在我们要创建面包对象,我们将Bread设计成抽象类,同时创建面包工厂SimpleBreadFactory.
类图如下:
类的代码如下:
1 BreadStore.java
public class BreadStore {
private Bread bread=null;
private SimpleBreadFactory factory;
public BreadStore(SimpleBreadFactory factory){
this.factory = factory;
}
public Bread orderBread(String type){
bread = factory.createBread(type);
bread.prepare();
bread.bake();
bread.box();
return bread;
}
}
2 SimpleBreadFactory.java
public class SimpleBreadFactory {
Bread bread = null;
public Bread createBread(String type){
if(type.equals("agg")){
bread = new AggBread();
}else if(type.equals("cheese")){
bread = new CheeseBread();
}else{
bread = new BufferBread("buffer");
}
return bread;
}
}
3 Bread.java
public abstract class Bread {
abstract void prepare();
abstract void bake();
abstract void box();
}
4 AggBread.java
public class AggBread extends Bread {
@Override
void prepare() {
System.out.println("agg bread is preparing...");
}
@Override
void bake() {
System.out.println("agg bread is baking...");
}
@Override
void box() {
System.out.println("agg bread is boxing...");
}
}
5 BufferBread.java
public class BufferBread extends Bread {
@Override
void prepare() {
System.out.println("buffer bread is preparing...");
}
@Override
void bake() {
System.out.println("buffer bread is baking...");
}
@Override
void box() {
System.out.println("buffer bread is boxing...");
}
}
6 CheeseBread.java
public class CheeseBread extends Bread {
@Override
void prepare() {
System.out.println("cheese bread is preparing...");
}
@Override
void bake() {
System.out.println("cheese bread is baking...");
}
@Override
void box() {
System.out.println("cheese bread is boxing...");
}
}
7 测试程序
public class BreadTestDrive {
public static void main(String[] args) {
BreadStore store = new BreadStore(new SimpleBreadFactory());
store.orderBread("agg");
store.orderBread("cheese");
store.orderBread("buffer");
}
}
测试结果
agg bread is preparing...
agg bread is baking...
agg bread is boxing...
cheese bread is preparing...
cheese bread is baking...
cheese bread is boxing...
buffer bread is preparing...
buffer bread is baking...
buffer bread is boxing...