#
Factory method
#
概念
定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使得对象的创建延迟到子类中进行。
#
结构
工厂方法模式一般包含四个角色:
- 抽象产品(Product):定义产品的抽象接口。
- 具体产品(ConcreteProduct):实现抽象产品的具体类。
- 抽象工厂(Factory):定义工厂的抽象接口。
- 具体工厂(ConcreteFactory):实现工厂接口,负责创建某种具体产品。
符合开闭原则
#
例子
// 抽象产品
interface Shape {
void draw();
}
// 具体产品 - 圆形
class Circle implements Shape {
@Override
public void draw() {
System.out.println("画一个圆形");
}
}
// 具体产品 - 方形
class Square implements Shape {
@Override
public void draw() {
System.out.println("画一个方形");
}
}
// 抽象工厂
interface ShapeFactory {
Shape createShape();
}
// 具体工厂 - 生产圆形
class CircleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Circle();
}
}
// 具体工厂 - 生产方形
class SquareFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Square();
}
}
// 客户端
public class FactoryMethodDemo {
public static void main(String[] args) {
// 使用圆形工厂
ShapeFactory circleFactory = new CircleFactory();
Shape circle = circleFactory.createShape();
circle.draw();
// 使用方形工厂
ShapeFactory squareFactory = new SquareFactory();
Shape square = squareFactory.createShape();
square.draw();
}
}