定義
將對象的創建委託給工廠,通過傳入不同的參數或class,創建接口的不同實現或抽象類的不同子類.
示例
模擬女媧造人,有三種膚色的人,黃種人,白種人,黑種人.
1.創建人類接口
public interface Human {
void talk(); //會說話
void getColor(); //獲取膚色
}
2.創建人類接口的不同實現類
public class YellowHuman implements Human{
@Override
public void talk() {
System.out.println("說話!!!");
}
@Override
public void getColor() {
System.out.println("膚色爲黃色!!!");
}
}
public class WhiteHuman implements Human{
@Override
public void talk() {
System.out.println("說話!!!");
}
@Override
public void getColor() {
System.out.println("膚色爲白色!!!");
}
}
public class BlackHuman implements Human{
@Override
public void talk() {
System.out.println("說話!!!");
}
@Override
public void getColor() {
System.out.println("膚色爲黑色!!!");
}
}
3.創建工廠
通過反射創建更爲通用的工廠模板,根據傳入實現類clazz的不同,獲得不同的實現類對象.
public class HumanFactory {
public static <T> T getClassInstance(Class<? extends T> clazz){
T obj = null;
try {
obj = (T) Class.forName(clazz.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return obj;
}
}
4.運行
public static void main(String[] args) {
YellowHuman yh = HumanFactory.getClassInstance(YellowHuman.class);
WhiteHuman wh = HumanFactory.getClassInstance(WhiteHuman.class);
BlackHuman bh = HumanFactory.getClassInstance(BlackHuman.class);
yh.talk();
yh.getColor();
wh.talk();
wh.getColor();
bh.talk();
bh.getColor();
}