说明
工厂方法(Factory Method)模式是一种工厂模式,也叫多态性工厂(Poloymorphic Factory)模式。
工厂方法模式涉及如下角色:
- 抽象工厂角色:给出具体工厂角色必须实现的接口。
- 具体工厂角色:实现抽象工厂的接口,了解创建具体产品的逻辑,创建具体的产品。
- 抽象产品角色:给出具体产品的共同接口。可以使用标记接口(即接口是空的)。
- 具体产品角色:实现抽象产品的接口。
- 客户端角色:调用工厂角色创建具体的产品。
一般来说,工厂角色的层级和产品角色的层级是相对应的。先把产品角色的层级规划好,再规划工厂角色的层级。
当增加一个新的产品时,抽象工厂角色不需要修改,修改具体工厂角色即可。
示例
一个简单的示例
定义一个抽象产品,这是一个标记接口:
package com.thb;
public interface Graphic {
}
定义两个具体产品:
package com.thb;
public class Circle implements Graphic {
}
package com.thb;
public class Rectangle implements Graphic {
}
定义一个抽象工厂:
package com.thb;
public interface Factory {
Graphic create();
}
因为有两个具体产品,所以定义两个具体工厂:
package com.thb;
public class CircleFactory implements Factory {
@Override
public Graphic create() {
return new Circle();
}
}
package com.thb;
public class RectangleFactory implements Factory {
@Override
public Graphic create() {
return new Rectangle();
}
}
定义一个客户端,进行调用:
package com.thb;
public class Client {
private static Graphic circle;
private static Graphic rectangle;
private static Factory circleFactory;
private static Factory rectangleFactory;
public static void main(String[] args) {
circleFactory = new CircleFactory();
rectangleFactory = new RectangleFactory();
circle = circleFactory.create();
rectangle = rectangleFactory.create();
}
}