橘生淮南则为橘,橘生淮北则为枳
3:54 PM
工厂方法模式(Factory Method Pattern)
关于产品(Product)
- AbstractProduct-抽象产品
- ConcreteProductA-具体产品A
- ConcreteProductB-具体产品B
关于工厂(Factory or Creator):
- AbstractFactory-抽象工厂
- ConcreteFactoryA-具体工厂A
- ConcreteFactoryB-具体工厂B
------------
随便举个例子,套用一句古语,牵强的很……
抽象产品:橘子(Orange)
具体产品:普通橘子(Mandarin Orange),枳子(Funny Orange)
抽象工厂:土地(Soil)
具体工厂:淮南土地(HuaiNan Soil),淮北土地(HuaiBei Soil)
1# Orange.java
public abstract class Orange {
protected String taste;
protected String name;
public String getTaste() {
return taste;
}
public String getName() {
return name;
}
}
2# MandarinOrange.java
public class MandarinOrange extends Orange {
public MandarinOrange() {
this.name = "Mandarin Orange";
this.taste = "delicious";
}
}
3# FunnyOrange.java
public class FunnyOrange extends Orange {
public FunnyOrange() {
this.name = "Funny Orange";
this.taste = "funny";
}
}
---------
4# Soil.java
public abstract class Soil {
abstract public Orange harvestOrange();
public void printInvolvedParameter() {
Orange org = this.harvestOrange();
System.out.println("Species:" + org.getName());
System.out.println("Tastes:" + org.getTaste());
}
}
5# HuaiNanSoil.java
public class HuaiNanSoil extends Soil {
@Override
public Orange harvestOrange() {
return new MandarinOrange();
}
}
6# HuaiBeiSoil.java
public class HuaiBeiSoil extends Soil {
@Override
public Orange harvestOrange() {
return new FunnyOrange();
}
}
---------
7# TestFactoryMethodPattern
public class TestFactoryMethodPattern {
public static void main(String[] args) {
Soil soil = new HuaiNanSoil();
soil.printInvolvedParameter();
System.out.println("----------");
soil = new HuaiBeiSoil();
soil.printInvolvedParameter();
}
}
--------
测试结果
Species:Mandarin Orange
Tastes:delicious
----------
Species:Funny Orange
Tastes:funny