一、工厂方法
定义:利用工厂类,对实现同一接口的不同类进行实例的创建。也就是根据不同的需求,创建不同的子类对象。
现在有一个基类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 eatingFish start eating
当然,我们还可以将AnimFactory 创建为基类,实现多个AnimFactory 子类,分别通过每个AnimFactory 子类创建对应的Anim 子类对象,在此就不一一诉说了。
二、jdk中的工厂方法
java.lang.Object.toString()java.lang.Boolean.valueOf(String)......
具体可看源代码中的实现。