工厂方法模式:不负责全部对象的创建,而是将创建对象放到工厂方法,在具体的客户端根据需要的工厂进行实例化。
1、类图:
2、实现
public abstract class AbstractExport {
protected String exportType;
public abstract void export();
}
public interface IExportFactory {
AbstractExport createExport();
}
public class AsyncExport extends AbstractExport {
public AsyncExport() {
super.exportType = "ASYNC";
}
@Override
public void export() {
System.out.println("export type:" + super.exportType);
}
}
public class SyncExport extends AbstractExport {
public SyncExport() {
super.exportType = "SYNC";
}
@Override
public void export() {
System.out.println("export type:" + super.exportType);
}
}
public class AgentExportFactory implements IExportFactory {
public AgentExportFactory() {
System.out.println("SyncExportFactory");
}
@Override
public AbstractExport createExport() {
return new SyncExport();
}
}
public class UserExportFactory implements IExportFactory {
public UserExportFactory() {
System.out.println("AsyncExportFactory");
}
public AbstractExport createExport() {
return new SyncExport();
}
}
public class ExportTest {
public static void main(String[] args) {
IExportFactory asyncExportFactory = new UserExportFactory();
AbstractExport asyncExport = asyncExportFactory.createExport();
asyncExport.export();
IExportFactory syncExportFactory = new AgentExportFactory();
AbstractExport syncExport = syncExportFactory.createExport();
syncExport.export();
}
}
3、优点:工厂类的具体实现客户端可以无需关心。在工厂中可以自由更换实现。