工廠方法模式的java代碼實現
package FactoryMethod;
/*** Work類爲Product,它定義工廠方法所創建的對象接口
* @author wjm
*
*/
public interface Work {
public abstract void work();
}
package FactoryMethod;
/**
*IworkFactory接口爲Creator,它聲明工廠方法,該方法返回一個Product類型的對象。Creator也可以定義一個工廠方法的缺省實現,它返回一個缺省的ConcreteProduct對象
*
*可以調用工廠方法以創建一個Product對象
* @author wjm
*
*/
public interface IWorkFactory {
public abstract Work getWork();
}
package FactoryMethod;
/**
* TeacherWorkFactory類和StudentWorkFactory類均爲ConcreteCreator,它重新定義工廠方法以返回一個ConcreteProduct實例
* @author wjm
*
*/
public class TeacherWorkFactory implements IWorkFactory{
@Override
public Work getWork() {
return new TeacherWork();
}
}
package FactoryMethod;
/**
* TeacherWork類和StudentWork類均爲ConcreteProduct類,即實現Product接口
* @author wjm
*
*/
public class TeacherWork implements Work {
@Override
public void work() {
System.out.println("老師審批作業");
}
}
package FactoryMethod;
public class StudentWorkFactory implements IWorkFactory{
@Override
public Work getWork() {
return new StudentWork();
}
}
package FactoryMethod;
public class StudentWork implements Work{
@Override
public void work() {
System.out.println("學生做作業");
}
}
package FactoryMethod;
/**
* 工廠方法:
* 定義一個用於創建對象的接口(Creator),讓子類決定實例化哪一個類。Factory Method使一個類的實例化延遲到其子類
*
* 適用性:
* 1.當一個類不知道它所必須創建的對象的類的時候
* 2.當一個類希望由它的子類來指定它所創建的對象的時候
* 3.當類將創建對象的職責委託給多個幫助子類中的某一個,並且你希望將哪一個幫助子類時代理者這一信息局部化的時候
* @author wjm
*
*/
public class Test {
public static void main(String[] args) {
IWorkFactory studentWorkFactory = new StudentWorkFactory();//接口指向實現類
studentWorkFactory.getWork().work();
IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
teacherWorkFactory.getWork().work();
}
}