Factory英文名叫工厂,所以中文翻译为工厂模式,在这个模式中,主要的角色有Product,Factory,concreteProduct和concreteFactory,其中product和factory都是抽象的接口,属于framework包,而concreteProduct和concreteFactory是实际的类,这里我们把实际的类放入idcard包中,下面举例说明:
用factory method模式制作身份证;
首先创建product接口
1 package frameWork;
2
3 public interface Product {
4 public abstract void use();
5 }
再创建Factory抽象类,这样工厂与产品的抽象关系就建立好了
1 package frameWork;
2
3 public abstract class Factory {
4 protected abstract void registerProduct(Product product);
5
6 protected abstract Product createProduct(String owner);
7
8 public final Product create(String owner) {
9 Product p = createProduct(owner);
10 registerProduct(p);
11 return p;
12 }
13 }
在定义实际的工厂的类
1 package idCard;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import frameWork.Factory;
7 import frameWork.Product;
8
9 public class IDCardFactory extends Factory {
10 private List owners = new ArrayList();
11
12 @Override
13 public void registerProduct(Product product) {
14 owners.add(((IDCard) product).getOwner());
15 }
16
17 @Override
18 public Product createProduct(String owner) {
19 return new IDCard(owner);
20 }
21
22 public List getOwners() {
23 return owners;
24 }
25 }
最后定义实际的产品类
1 package idCard;
2
3 import frameWork.Product;
4
5 public class IDCard implements Product {
6 private String owner;
7
8 public IDCard(String owner) {
9 this.owner = owner;
10 System.out.println("制作了" + owner + "的ID卡");
11 }
12
13 @Override
14 public void use() {
15 System.out.println("使用了" + owner + "的ID卡");
16 }
17
18 public String getOwner() {
19 return owner;
20 }
21
22 }
Factory Method整个架构就是这样,先建立抽象工厂与抽象产品的关系,再通过继承和实现接口的方式建立实际工厂与实际产品之间的关系,一旦实际工厂和产品发生变化,仅需要更改实际工厂与实际产品这两个类,并不需要更改抽象工厂与抽象产品,因此在Factory method模式中,framework包中的类可以作为组件重复使用,这就是Factory method模式的优点。
来源:https://www.cnblogs.com/xiaoyaomianbiren/p/12165407.html