我有枚舉類如何使用設計模式來代替開關盒
public enum TaskName {
LOGIN,REGISTER,MESSAGE
}
我用這個枚舉與開關的情況下
public class TaskController {
private UserDao userDaoJpaImpl;
private FriendDao friendDaoJpaImpl;
private GroupDao groupDaoJpaImpl;
private MessageDao messageDaoJpaImpl;
public TaskController() {
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("Eclipselink_JPA");
userDaoJpaImpl = new UserDaoJpaImpl(emfactory);
friendDaoJpaImpl = new FriendDaoJpaImpl(emfactory);
groupDaoJpaImpl = new GroupDaoJpaImpl(emfactory);
messageDaoJpaImpl = new MessageDaoJpaImpl(emfactory);
}
public void doIt(String taskName)
{
switch (taskName) {
case LOGIN:
userDaoJpaImpl.create(/*Something*/);
//Implementation
break;
case REGISTER:
//Implementation
break;
case MESSAGE:
messageDaoJpaImpl.create(/*Something*/);
//Implementation
break;
}
}
}
創建TaskController的對象 靜態TaskController控制器= new TaskController()
這樣對象只創建一次
現在我打算使用命令模式來代替開關情況
但我堅持瞭如何使用我的UserDaoJpaImpl,FriendDaoJpaImpl,GroupDaoJpaImpl,MessageDaoJpaImpl內指揮類新
編輯
命令類
public interface Command {
void setSession(Session session); //Session is websocket connection session not HttpSession
void setConnectedUser(Map<String, UserDTO> connectedUser);
void setData(String data);
JSONObject execute();
}
我想移動整個日誌ic從TaskController.doIt()轉換爲其他將執行命令接口的命令類。
我正在使用Websocket。我不想用彈簧這個問題
在此先感謝
命令模式很好。但現在更像是你需要一個工廠模式來創建實例。是什麼讓你覺得你需要命令模式?這是要求還是你在這方面發現了挑戰?但是所有的Impl類都應該實現這個接口,並根據它來調用create方法。 –
對不起,我已經粘貼了舊代碼,我已經實現了界面。這不是要求some1建議我。 – abhishek221192
你的控制器可能做得太多了(至少有一種方法)。忘記命令模式,否則你將會遇到另一個問題。 – atamanroman