0%

设计模式-工厂方法模式

工厂方法模式(Factory method pattern)属于创建型模式,使用工厂方法创建对象,不向客户端暴露具体逻辑,不指定具体的实现类。

结构


涉及到了四个角色,

  • Product:抽象产品
  • ConcreteProduct:具体产品
  • Creator:抽象工厂
  • ConcreteCreator:具体工厂

抽象产品

Product,需要生成的抽象产品。示例如下

1
2
3
public interface Shape {
void draw();
}

具体产品

Creator,抽象产品的实现类。示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Circle implements Shape{
@Override
public void draw() {
System.out.println("圆形");
}
}

public class Rectangle implements Shape{
@Override
public void draw() {
System.out.println("矩形");
}
}

抽象工厂

Creator,接口或者抽象类,用来创建产品(可能含有其他功能)。示例如下

1
2
3
public interface ShapeFactory {
Shape CreateShape();
}

具体工厂

ConcreteCreator,重写抽象工厂的方法来返回不同种类的产品(不一定是new操作)。示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
public class CircleFactory implements ShapeFactory{
@Override
public Shape CreateShape() {
return new Circle();
}
}

public class RectangleFactory implements ShapeFactory{
@Override
public Shape CreateShape() {
return new Rectangle();
}
}

客户端

测试生成product对象,示例如下

1
2
3
4
5
6
7
public class Client {
public static void main(String[] args) {
ShapeFactory shapeFactory = new CircleFactory();
Shape shape = shapeFactory.CreateShape();
shape.draw();
}
}

output:圆形

优势

  • 耦合性降低
  • 满足单一职责
  • 满足开闭原则

缺点

具体工厂只能生成特定的具体产品

完整代码

完整代码已上传,项目地址https://github.com/yuan0824/DesignPattern

参考资料