我们再来看使用泛型的写法,父类或接口中定义了泛型约束,只要求这个“e”是Employee的子类即可,下面的两个实现类可以清楚地看到实现接口方法的返回类型不同了,但返回类型都是Employee的子类。
//使用泛型的Employee工厂接口
public interface EmployeeFactoryByGeneric<e extends Employee> {
public e createEmployee();
}
//使用泛型的DepartmentLeader工厂实现
public class DepartmentLeaderFactory implements EmployeeFactoryByGeneric<DepartmentLeader>{
public DepartmentLeader createEmployee()
{
return new DepartmentLeader();
}
}
//使用泛型的Employee工厂实现
public class EmployeeFactoryImplByGeneric implements EmployeeFactoryByGeneric<EmployeeImpl> {
public EmployeeImpl createEmployee()
{
return new EmployeeImpl();
}
}
public interface EmployeeFactoryByGeneric<e extends Employee> {
public e createEmployee();
}
//使用泛型的DepartmentLeader工厂实现
public class DepartmentLeaderFactory implements EmployeeFactoryByGeneric<DepartmentLeader>{
public DepartmentLeader createEmployee()
{
return new DepartmentLeader();
}
}
//使用泛型的Employee工厂实现
public class EmployeeFactoryImplByGeneric implements EmployeeFactoryByGeneric<EmployeeImpl> {
public EmployeeImpl createEmployee()
{
return new EmployeeImpl();
}
}
这样有什么好处呢?让我们来看看如何调用的。可以看出调用方面没有什么大的区别。
JDK1.4的做法
EmployeeFactory factory = new EmployeeFactoryImpl();
Employee leader = factory.createEmployee("leader");
leader.getName();
使用泛型的做法:
EmployeeFactoryByGeneric factoryByGeneric = new DepartmentLeaderFactory();
Employee employee = factoryByGeneric.createEmployee();
employee.getName();