工厂方法(FactoryMethod):
定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method 使一个类的实例化延迟到其子类。
工厂方法模式,这个方法有效地解决了简单工厂模式扩展性差的问题,想要进行扩展,只需要新加类就行,不需要更改原有类,下面是一个例子:
public interface Person{
}
public class Student implements Person{
}
public class Teacher implements Person{
}
public interface PersonFactory{
public Person producePerson();
}
public class StudentFactory implements PersonFactory {
@Override
public Person producePerson() {
return new Student();
}
}
public class TeacherFactory implements PersonFactory {
@Override
public Person producePerson() {
return new Teacher();
}
}
public class Test {
public static void main(String[] args){
PersonFactory pf;
Person p;
pf = new StudentFactory();
p = pf.producePerson();
//这时,p是学生对象
pf = new TeacherFactory();
p = pf.producePerson();
//这时,p是老师的手机
}
如果想要生产Farmer,只需要新加一个Farmer类,实现Person接口,再新加一个FarmerFactory,实现PersonFactory接口就行了,新加的代码如下:
public class Farmer implements Person{
}
public class FarmerFactory implements PersonFactory {
@Override
public Person producePerson() {
return new Farmer();
}
}
这样就实现了新加一个这个工厂产的产品,但是不会更改原有类的要求,但是,这还会有问题。在工厂方法模式中,到底生产什么,是写进了代码里(我们俗称硬代码),假如消费者这次想要Student,下次又想要Hunter了怎么办,总不可能他提一次需求我们就改一次代码吧,这样显然是不行的,因此,下面又有了抽象工厂模式(Abstract Factory)就解决了这个问题——待续