工厂方法模式 :定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
类图:
实现代码:
class Product {}
class ConcreteProduct extends Product {}
abstractclass Creator {
publicabstract Product factoryMethod();
}
class ConcreteCreator extends Creator {
@Override
public Product factoryMethod() {
returnnew ConcreteProduct();
}
}
publicstaticvoid main(String[] args) {
//1.创建对应的工厂对象
Creator factory=new ConcreteCreator();
//2.工厂对象生产产品
Product product=factory.factoryMethod();
//3.得到产品
System.out.println(product);
}
运行结果:
Factory_Method.ConcreteProduct@1bab50a
得到的是ConcreteProduct对象。
优点:封装了产品对象的创建过程;因为有Creator作为父类,如果想要扩展直接添加其子类就可以了。这样扩展性比较高。。
缺点:产品类和工厂类的耦合度很高。
简单工厂和工厂方法的区别:个人认为简单工厂和工厂方法最大的区别就是简单工厂需要判断参数来产生对象,但如果简单工厂和工厂方法用上反射后差别并不大。但还是有的,简单工厂+反射只能返回产品;工厂方法+反射可以在创建对象的时候做其他事情(输出helloWord)。所以初始化时不需要做额外的东西可以用简单工厂。