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