定义:利用工厂类,对实现同一接口的不同类进行实例的创建。也就是根据不同的需求,创建不同的子类对象。
现在有一个基类Anim,有一个AnimFactory工厂类,所有实现了Anim的子类都通过AnimFactory来创建:
public interface Anim {
void eat();
}
public class Bird implements Anim {
@Override
public void eat() {
System.out.println("Bird start eating");
}
}
public class Fish implements Anim {
@Override
public void eat() {
System.out.println("Fish start eating");
}
}
public class AnimFactory {
public static final int FISH = 0x01;
public static final int BIRD = 0x02;
public static Anim createAnim(int animType) {
Anim anim = null;
switch (animType) {
case FISH:
anim = new Fish();
break;
case BIRD:
anim = new Bird();
break;
default:
break;
}
return anim;
}
public static final void main(String[] args) {
AnimFactory.createAnim(AnimFactory.BIRD).eat();
AnimFactory.createAnim(AnimFactory.FISH).eat();
}
}
输出结果:
Bird start eating
Fish start eating
当然,我们还可以将AnimFactory 创建为基类,实现多个AnimFactory 子类,分别通过每个AnimFactory 子类创建对应的Anim 子类对象,在此就不一一诉说了。
二、jdk中的工厂方法java.lang.Object.toString()
java.lang.Boolean.valueOf(String)
......
具体可看源代码中的实现。
热门评论
如果子类太多,那么AnimFactory还是可控的吗?