上一篇博客说到简单的工厂模式不适合层级多的产品,我们需要用到工厂模式中的工厂方法模式来完成,那什么是工厂方法模式呢,跟着我一步一步认识它吧;
工厂方法模式是定义一个创建产品对象的工厂接口,将时间实际创建工作推迟到子类中。
工厂方法模式的结构:
- 抽象接口(creator):工厂方法模式的核心,与应用程序无关的,任何模式中创建对象的工厂类必须实现这个接口。
- 具体工厂(concretecreator):实现了抽象工厂接口的具体类;
- 抽象产品(product):所有产品的超类;
- 具体产品(concreteproduct):实现了抽象产品接口;
- 客户端(client):创建工厂的对象,生产产品;
下面还是以水果的例子来说明工厂方法模式,之前所有的水果都在一个地方生长,现在为了每种水果有更好的环境,需要为他们量身定制生长环境:
产品接口:
/**
* 方法模式中的具体产品
*
* @author Administrator
*
*/
public class Apple implements Fruit {
/**
* 每种产品自有的特性 顏色
*/
private String appleColor;
public String getAppleColor() {
System.out.println("Color is " + appleColor);
return appleColor;
}
public Apple setAppleColor(String appleColor) {
this.appleColor = appleColor;
return this;
}
@Override
public void plant() {
// TODO Auto-generated method stub
System.out.println("Apple has been planted");
}
@Override
public void grow() {
// TODO Auto-generated method stub
System.out.println("Apple is growing");
}
@Override
public void harvest() {
// TODO Auto-generated method stub
System.out.println("Apple has been harvested");
}
}
工厂接口
/**
* 方法模式中的抽象工厂
*
* @author Administrator
*
*/
public interface FruiteCreator {
/**
* 工厂方法
* @return
*/
Fruit factory();
}
具体的工厂
/**
* 具体的工厂
* @author Administrator
*
*/
public class AppleCreator implements FruiteCreator {
@Override
public Fruit factory() {
// TODO Auto-generated method stub
return new Apple().setAppleColor("red");
}
}
具体的产品
/**
* 方法模式中的具体产品
*
* @author Administrator
*
*/
public class Apple implements Fruit {
/**
* 每种产品自有的特性 顏色
*/
private String appleColor;
public String getAppleColor() {
System.out.println("Color is " + appleColor);
return appleColor;
}
public Apple setAppleColor(String appleColor) {
this.appleColor = appleColor;
return this;
}
@Override
public void plant() {
// TODO Auto-generated method stub
System.out.println("Apple has been planted");
}
@Override
public void grow() {
// TODO Auto-generated method stub
System.out.println("Apple is growing");
}
@Override
public void harvest() {
// TODO Auto-generated method stub
System.out.println("Apple has been harvested");
}
}
测试:
public class Test {
public static void main(String[] args) {
AppleCreator mAppleCreator = new AppleCreator();
Apple apple = (Apple) mAppleCreator.factory();
apple.plant();
apple.grow();
apple.harvest();
apple.getAppleColor();
}
}
Apple has been planted
Apple is growing
Apple has been harvested
Color is red
下一篇来看抽象工厂模式