模式定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
模式结构
模式结构
代码实现
public interface Human {
void print();
}
public class Man implements Human {
public void print() {
System.out.println("我是男人");
}
}
public class Woman implements Human {
public void print() {
System.out.println("我是女人");
}
}
public abstract class HumanFactory {
public abstract Human createHuman();
}
public class ManFactory extends HumanFactory {
@Override
public Human createHuman() {
return new Man();
}
}
public class WomanFactory extends HumanFactory {
@Override
public Human createHuman() {
return new Woman();
}
}
public class Client {
public static void main(String[] args) {
HumanFactory manFactory = new ManFactory();
Human man = manFactory.createHuman();
man.print();
}
}
模式的优缺点
优点
可以在不知道具体的类的情况下编程。
在系统增加新的产品时,只需要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。
缺点
具体产品对象和工厂方法耦合性。
思考
模式本质:延迟到子类选择实现。
开发中的应用场景
如果一个类需要创建某个接口的对象,但是又不知道具体的实现,这种情况可以选用工厂方法模式,
把创建对象的工作延迟到子类中去实现。如果一个类本身就希望由它的子类来创建所需的对象的时候,应该使用工厂方法模式。