[環境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com)
UML圖:

代碼:
/**
*工廠模式測試類
*@version 2009-4-3
*@author Winty(wintys@gmail.com)
*/
package pattern.factory;
public class Factory{
public static void main(String[] args){
Fruit fruit;
FruitGardener fruitGardener;
fruitGardener = new AppleGardener();
fruit = fruitGardener.factory();
fruit.plant();
fruit.harvest();
fruitGardener = new StrawberryGardener();
fruit = fruitGardener.factory();
fruit.plant();
fruit.harvest();
fruitGardener = new GrapeGardener();
fruit = fruitGardener.factory();
fruit.plant();
fruit.harvest();
}
}
/**
*抽象產品
*/
abstract class Fruit{
protected String name;
public abstract void plant();
public abstract void harvest();
}
/**
*具體產品(Apple)
*/
class Apple extends Fruit{
public Apple(){
name = "Apple";
}
@Override
public void plant(){
System.out.println(name + " plant");
}
@Override
public void harvest(){
System.out.println(name + " harvest");
}
}
/**
*具體產品(草莓)
*/
class Strawberry extends Fruit{
public Strawberry(){
name = "Strawberry";
}
@Override
public void plant(){
System.out.println(name + " plant");
}
@Override
public void harvest(){
System.out.println(name + " harvest");
}
}
/**
*具體產品(葡萄)
*/
class Grape extends Fruit{
public Grape(){
name = "Grape";
}
@Override
public void plant(){
System.out.println(name + " plant");
}
@Override
public void harvest(){
System.out.println(name + " harvest");
}
}
/**
*抽象工廠類
*/
abstract class FruitGardener{
public abstract Fruit factory();
}
/**
*具體Apple工廠
*/
class AppleGardener extends FruitGardener{
@Override
public Fruit factory(){
return new Apple();
}
}
/**
*具體草莓工廠
*/
class StrawberryGardener extends FruitGardener{
@Override
public Fruit factory(){
return new Strawberry();
}
}
/**
*具體葡萄工廠
*/
class GrapeGardener extends FruitGardener{
@Override
public Fruit factory(){
return new Grape();
}
}
*工廠模式測試類
*@version 2009-4-3
*@author Winty(wintys@gmail.com)
*/
package pattern.factory;
public class Factory{
public static void main(String[] args){
Fruit fruit;
FruitGardener fruitGardener;
fruitGardener = new AppleGardener();
fruit = fruitGardener.factory();
fruit.plant();
fruit.harvest();
fruitGardener = new StrawberryGardener();
fruit = fruitGardener.factory();
fruit.plant();
fruit.harvest();
fruitGardener = new GrapeGardener();
fruit = fruitGardener.factory();
fruit.plant();
fruit.harvest();
}
}
/**
*抽象產品
*/
abstract class Fruit{
protected String name;
public abstract void plant();
public abstract void harvest();
}
/**
*具體產品(Apple)
*/
class Apple extends Fruit{
public Apple(){
name = "Apple";
}
@Override
public void plant(){
System.out.println(name + " plant");
}
@Override
public void harvest(){
System.out.println(name + " harvest");
}
}
/**
*具體產品(草莓)
*/
class Strawberry extends Fruit{
public Strawberry(){
name = "Strawberry";
}
@Override
public void plant(){
System.out.println(name + " plant");
}
@Override
public void harvest(){
System.out.println(name + " harvest");
}
}
/**
*具體產品(葡萄)
*/
class Grape extends Fruit{
public Grape(){
name = "Grape";
}
@Override
public void plant(){
System.out.println(name + " plant");
}
@Override
public void harvest(){
System.out.println(name + " harvest");
}
}
/**
*抽象工廠類
*/
abstract class FruitGardener{
public abstract Fruit factory();
}
/**
*具體Apple工廠
*/
class AppleGardener extends FruitGardener{
@Override
public Fruit factory(){
return new Apple();
}
}
/**
*具體草莓工廠
*/
class StrawberryGardener extends FruitGardener{
@Override
public Fruit factory(){
return new Strawberry();
}
}
/**
*具體葡萄工廠
*/
class GrapeGardener extends FruitGardener{
@Override
public Fruit factory(){
return new Grape();
}
}