定义:
又称多态性工厂模式,与简单工厂、抽象工厂模式同属于三大设计模式中的创建形模式。定义一个创建对象的接口,由子类决定要实例化的类是哪一个。
使用场景:
客户端不关心创建产品的细节,只关心产品品牌,比如我们只用知道某个手机是苹果的,不需要去关心它是哪个工厂代工的。
如果在编写代码过程中无法预知对象确切类别及其依赖关系时,可以使用工厂方法。
优点:
用户只需要关心产品对应的工厂,不需要关心创建细节;增加新产品的时候完全符合开闭原则,提高可扩展性。
缺点:
当产品种类多的时候,就会出现大量的工厂,工厂数量容易过多,增加了复杂度,增加了系统的抽象性和理解难度
代码实例:
举一个画图形的例子,有圆和矩形两种
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("画一个圆");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("画一个矩形");
}
}
public abstract class ShapeFactory {
public abstract Shape getShape();
}
public class CircleFactory extends ShapeFactory {
@Override
public Shape getShape() {
return new Circle();
}
}
public class RectangleFactroy extends ShapeFactory {
@Override
public Shape getShape() {
return new Rectangle();
}
}