概念
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
实例
PlanedNoodleStore,StretchedNoodleStore实现接口NoodleStore
public interface NoodleStore {
Noodle orderNoodle(String type);
}
public class PlanedNoodleStore implements NoodleStore {
public Noodle orderNoodle(String type) {
Noodle noodle = null;
if (type.equalsIgnoreCase("Hot"))
noodle = new HotPlanedNoodle();
else
noodle = new UnhotPlanedNoodle();
return noodle;
}
}
public class StretchedNoodleStore implements NoodleStore{
public Noodle orderNoodle(String type) {
Noodle noodle=null;
if(type.equalsIgnoreCase("Hot"))
noodle=new HotStretchedNoodle();
else
noodle=new UnhotStretchedNoodle();
return noodle;
}
}
StretchedNoodle,PlanedNoodle各有两种口味
public abstract class Noodle {
String description = "";
public String getDescription() {
return description;
}
}
public class HotPlanedNoodle extends Noodle {
HotPlanedNoodle() {
discreption = "辣味刀削面";
}
}
public class UnhotPlanedNoodle extends Noodle {
UnhotPlanedNoodle() {
discreption = "淡味刀削面";
}
}
public class HotStretchedNoodle extends Noodle {
HotStretchedNoodle() {
discreption = "辣味拉面";
}
}
public class UnhotStretchedNoodle extends Noodle {
UnhotStretchedNoodle() {
discreption = "淡味拉面";
}
}
测试代码
NoodleStore store=new PlanedNoodleStore();
Noodle noodle=store.orderNode("Hot");
System.out.println(noodle.getDescription());
store=new StretchedNoodleStore();
noodle=store.orderNode("unhot");
System.out.println(noodle.getDescription());
测试结果
辣味刀削面
淡味拉面
参考链接
* http://www.cnblogs.com/poissonnotes/archive/2010/12/01/1893871.html
* 《Head First 设计模式》