Factory Method模式

◇◆丶佛笑我妖孽 提交于 2020-01-08 11:44:41

  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模式的优点。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!