/**
* 简单工厂模式:不直接产生对象,而由一个具体的工厂类统一产生对象。这样不利于增加新的产品。
*
* 工厂方法模式:一个抽象的工厂类可以派生出多个具体的工厂类来负责产生各个产品的对象。(大话设计模式中是用一个具体工厂类,把负责生成某一产品对象封装为具体工厂类的一个函数)
* 这样在产生对象时相互独立,更符合开放闭合原则。
* 抽象工厂模式:有多个抽象产品类,每个抽象产品类可以派生多个具体产品类,一个抽象工厂类可以派生出多个具体
* 工厂类,而每个具体工厂类可以创建多个具体产品类的对象。比较适合产品是分系列或分类的情况。
*
*简单工厂实现例子可参考:http://beijishiqidu.iteye.com/blog/1944127
*现在把这个例子用工厂方法模式来实现,代码简化了如下。
*/
/**
*
*抽象产品类或接口(接口要单独放一个文件中)
*
*/
abstract class Fruit{
static final int age=0;
abstract void plant();
}
/**
* 具体产品类Apple
* @author Administrator
*
*/
class Apple extends Fruit{
@Override
void plant() {
System.out.println("plant apple!");
}
}
/**
* 具体产品类Grape
* @author Administrator
*
*/
class Grape extends Fruit{
@Override
void plant() {
// TODO Auto-generated method stub
System.out.println("plant Grape!");
}
}
/**
* 抽象工厂类
* @author Administrator
*
*/
abstract class Factory{
abstract Fruit creatFruit();
}
/**
* 产生Apple的具体工厂类
* @author Administrator
*
*/
class AppleFactory extends Factory{
@Override
Fruit creatFruit() {
// TODO Auto-generated method stub
return new Apple();
}
}
/**
* 产生Grape的具体工厂类
* @author Administrator
*
*/
class GrapeFactory extends Factory{
@Override
Fruit creatFruit() {
// TODO Auto-generated method stub
return new Grape();
}
}
/**
* 测试
* @author Administrator
*
*/
public class FactoryModel {
public static void main(String[] argsStrings){
Factory appleFactory=new AppleFactory();
Factory grapeFactory=new GrapeFactory();
Fruit apple=appleFactory.creatFruit();
Fruit grape=grapeFactory.creatFruit();
apple.plant();
grape.plant();
}
}
工厂方法模式的的UML类图可以参看:http://haolloyin.blog.51cto.com/1177454/332576