简单工厂模式就是由一个工厂类根据参数来决定创立出那一种产品类的实例。下面的UML类图就精确定义了简单工厂模式的结构。
简单工厂模式就是由一个工厂类根据参数来决定创立出那一种产品类的实例。下面的UML类图就精确定义了简单工厂模式的结构。
public interface FruitIF {
void grow();
void harvest();
void plant();
String color = null;
String name = null;
}
public class Apple implements FruitIF
{
public void grow()
{
log("Apple is growing...");
}
public void harvest()
{
log("Apple has been harvested.");
}
public void plant()
{
log("Apple has been planted.");
}
public static void log(String msg)
{
System.out.println(msg);
}
public int getTreeAge(){ return treeAge; }
public void setTreeAge(int treeAge){ this.treeAge = treeAge; }
private int treeAge;
}
public class Grape implements FruitIF
{
public void grow()
{
log("Grape is growing...");
}
public void harvest()
{
log("Grape has been harvested.");
}
public void plant()
{
log("Grape has been planted.");
}
public static void log(String msg)
{
System.out.println(msg);
}
public boolean getSeedful()
{
return seedful;
}
public void setSeedful(boolean seedful)
{
this.seedful = seedful;
}
private boolean seedful;
}
public class Strawberry implements FruitIF
{
public void grow()
{
log("Strawberry is growing...");
}
public void harvest()
{
log("Strawberry has been harvested.");
}
public void plant()
{
log("Strawberry has been planted.");
}
public static void log(String msg)
{
System.out.println(msg);
}
}
public class FruitGardener
{
public FruitIF factory(String which) throws BadFruitException
{
if (which.equalsIgnoreCase("apple"))
{
return new Apple();
}
else if (which.equalsIgnoreCase("strawberry"))
{
return new Strawberry();
}
else if (which.equalsIgnoreCase("grape"))
{
return new Grape();
}
else
{
throw new BadFruitException("Bad fruit request");
}
}
}
public class BadFruitException extends Exception
{
public BadFruitException(String msg)
{
super(msg);
}
}
try
{
FruitGardener gardener = new FruitGardener();
gardener.factory("grape");
gardener.factory("apple");
gardener.factory("strawberry");
...
}
catch(BadFruitException e)
{
...
}