所谓工厂方法模式(Factory Method Pattern),就是定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,也就是将实际创建实例对象的工作推迟到子类当中,核心工厂类不再负责具体产品的创建。
java.util.ArrayList也是java.util.List类的一个子类,实现了其iterator()接口方法,返回具体的迭代器AbstractList$Itr(具体产品),Itr类也是作为AbstractList的内部私有类使用。
下面是一个例子:
Factory.java
public interface Factory {
public Salary createSalary();
}
HeBeiSalaryFactory.java
public class HeBeiSalaryFactory implements Factory{
public Salary createSalary(){
return new HeBeiSalary();
}
}
JiLinSalaryFactory.java
public class JiLinSalaryFactory implements Factory{
public Salary createSalary(){
return new JiLinSalary();
}
}
Salary.java
public interface Salary {
void computerSalary();
}
HeBeiSalary.java
public class HeBeiSalary implements Salary{
public void computerSalary(){
System.out.println("开始计算河北子公司的薪资");
}
}
JiLinSalary .java
public class JiLinSalary implements Salary{
public void computerSalary(){
System.out.println("开始计算吉林子公司的薪资");
}
}
Client.java
public class Client {
public static void main(String[] args) {
Factory factory = new HeBeiSalaryFactory();//接口、实现类
Salary salary = factory.createSalary();
salary.computerSalary();
factory = new JiLinSalaryFactory();
salary = factory.createSalary();
salary.computerSalary();
}
}
在工厂方法模式中,客户端不再负责对象的创建,而是把这个责任交给了具体的工厂类,客户端只 负责对对象的调用,从而明确了各个类的职责。