[英]Can you explain me this code please return a SuperController
我在 github 中找到了這段代碼,用於使用 DTO 模式的學生管理系統
public interface SuperController<T extends SuperDTO>{
public boolean add(T dto) throws SQLException;
public T getAll(String id)throws SQLException; }
SuperDTO 是沒有任何字段或方法的空類
public class SuperDTO {
}
我的問題我可以理解如何使用以下類調用這個 SuperController:
public class ControllerFactory{
private static ControllerFactory controllerFactory;
private BatchDBControllerImpl ctrlBatch;
public enum ControllerType{
BATCH,CLASSES,LOGIN,REGISTER,STUDENT,ATTENDANCE,PAYMENT,EXAM,EXAM_DETAIL;
}
private ControllerFactory() {
}
public static ControllerFactory getInstance(){
if(controllerFactory==null){
controllerFactory=new ControllerFactory();
}
return controllerFactory;
}
public SuperController getController(ControllerType type){
switch(type){
case BATCH:
return new BatchDBControllerImpl();
case CLASSES:
return new ClassesDBControllerImpl();
case LOGIN:
return new LoginDBControllerImpl();
case REGISTER:
return new RegisterDBControllerImpl();
case STUDENT:
return new StudentDBControllerImpl();
case ATTENDANCE:
return new AttendanceDBControllerImpl();
case PAYMENT:
return new PaymentDBControllerImpl();
case EXAM_DETAIL:
return new ExamDetailDBControllerImpl();
case EXAM:
return new ExamDBControllerImpl();
default :
return null;
}
}
}
請向我解釋這個方法:
public SuperController getController(ControllerType type)
我不確定你做什么和不明白,所以如果你需要進一步澄清,請評論或編輯你的問題。
ControllerFactory
被稱為工廠對象; 這是一種設計模式,其中我們不直接調用對象的構造函數來實例化它,而是使用單獨負責該任務的不同類。 在這種情況下,工廠構建了似乎是不同類型的數據庫控制器(每個都有不同的預期功能),所有這些都實現了SuperController
接口。 這里的好處是我們可以使用這個工廠來創建所有這些具有相同共享類型的對象。 此外,這個工廠被稱為單例,因為創建的對象只能有一個實例(注意靜態引用和私有構造函數)。
所以,一旦你有了你的工廠,你就可以使用getController
方法來獲取你想要的對象的實例。
SuperController
可以被認為是一個契約,詳細說明了實現它的每個潛在對象所期望的基本功能。 實現的確切細節不同,但它們之間的整體行為模式應該相似。
ControllerType
是一個枚舉,它定義了有哪些有效的控制器類型,然后根據傳入的類型構造不同類型的 SuperController。 請注意,無論返回哪個,它始終是SuperController
類型,因為它實現了該接口。
如果您只想知道如何使用它,那么您需要獲取您的工廠實例,然后使用它來獲取您的控制器:
ControllerFactory controllerFactory = ControllerFactory.getInstance();
SuperController controller = controllerFactory.getController(ControllerFactory.ControllerType.DESIRED_TYPE_HERE);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.