文章目录
工厂方法模式介绍
工厂方法模式的优点在于,如果我们有一个产品族,使用工厂方法模式就可以方便地在这个产品族下开发新产品。
例如,我们有有一个产品族是Pet,这个产品族里包含Dog,Cat,Pig,Bird等多个产品。
那么我们就可以定义一个PetFactory,PetFactory中有一个泛型方法createPet,根据传入的Pet类型来创建返回相应类型的Pet,如传入Dog.class,则可以创建Dog对象;传入Cat.class,则可以创建Cat对象。
于是,在这个产品族里扩展新产品就变得很方便,不需要改动已有的代码。
工厂方法模式代码样例
1.Pet产品族类
public abstract class Pet {
}
2.Pet产品族下的产品,如Dog类,Cat类
public class Dog extends Pet {
}
public class Cat extends Pet {
}
3.Pet产品族工厂
public class PetFactory {
public <T extends Pet> T createPet(Class<T> clazz) {
Pet pet = null;
try {
pet = (T)clazz.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return (T)pet;
}
}
4.使用工厂
public class Client {
public static void main(String[] args) {
PetFactory factory = new PetFactory();
Dog dog = factory.createPet(Dog.class);
}
}
利用工厂方法模式,Pet产品族下的产品扩展变得很轻松。如果多了Pet产品族下多了Bird这个产品,那么只需要定义一个Bird类,继承Pet然后在调用createPet()方法时传入Bird.class,就可以创建得到Pet实例。