最近在学习状态模式
但是没有找到一个详细的例子
所以就随表找了一段代码来改一改
当然从简易程度上来说 这段代码没有必要改造 我只为练练手
当然也可以说这段代码可能不够典型 我只是为了体会一下
如果有什么地方不够到位 或是没有达到标准的地方还请各位不吝赐教
原代码:
public class TopMenuAction extends DispatchAction {
private IChannelService channelService;
private IUserDao userDao;
public ActionForward menulist(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) {
String uid = (String) request.getSession().getAttribute("uid");
List<ViewAuthChannelForm> channels = null;
List<Channel> admingchannel = null;
List<Menu> menuList = null;
try {
menuList = new ArrayList<Menu>();
if (userDao.isAdministrator(uid)) {
admingchannel= channelService.getChannelByParnetId(uid, "0");
for (Channel c : admingchannel) {
Menu menu = new Menu();
menu.setMenu_id(c.getId());
menu.setMenu_order_num(c.getOrderNum());
if (menu.getMenu_id().equals("1")){
menu.setMenu_url("/gzzd/index.jsp");
}
if(menu.getMenu_id().equals("2")){
menu.setMenu_url("/tztg/index.jsp");
}
if(menu.getMenu_id().equals("3")){
menu.setMenu_url("/gzdt/index.jsp");
}
if(menu.getMenu_id().equals("4")){
menu.setMenu_url("/zhfw/zhfwindex.jsp");
}
if(menu.getMenu_id().equals("5")){
menu.setMenu_url("/zxxx/index.jsp");
}
menu.setChannelName(c.getChannelName());
menuList.add(menu);
}
request.getSession().setAttribute(Consts.MENULIST, menuList);
}
catch (Exception e) {
e.printStackTrace();
}
return mapping.findForward("menu");
}
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
public IChannelService getChannelService() {
return channelService;
}
public void setChannelService(IChannelService channelService) {
this.channelService = channelService;
}
}
更改后:
public class HomeURL {
public MenuURLState getURLState(String menuId) throws Exception {
Properties prop = setState();
MenuURLState urlState = (MenuURLState) Class.forName(prop.getProperty(menuId)).newInstance();
return urlState;
}
public Properties setState() throws Exception {
Properties prop = new Properties();
ClassLoader cloader = getClass().getClassLoader();
InputStream is = cloader.getResourceAsStream("a/emp.properties");
prop.load(is);
return prop;
}
}
配置文件
emp.properties
1 = a.GzzdURLState
2 = a.TztgURLState
3 = a.GzdtURLState
4 = a.ZhfwURLState
5 = a.ZxxxURLState
public interface MenuURLState {
public String urlState();
}
public class GzzdURLState implements MenuURLState{
public String urlState() {
return "/gzzd/index.jsp";
}
}
public class TztgURLState implements MenuURLState {
public String urlState() {
return "/tztg/index.jsp";
}
}
public class TopMenuAction extends DispatchAction {
private IChannelService channelService;
private IUserDao userDao;
public ActionForward menulist(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) {
String uid = (String) request.getSession().getAttribute("uid");
List<ViewAuthChannelForm> channels = null;
List<Channel> admingchannel = null;
List<Menu> menuList = null;
try {
menuList = new ArrayList<Menu>();
if (userDao.isAdministrator(uid)) {
admingchannel= channelService.getChannelByParnetId(uid, "0");
for (Channel c : admingchannel) {
Menu menu = new Menu();
menu.setMenu_id(c.getId());
menu.setMenu_order_num(c.getOrderNum());
HomeURL homeURL = new HomeURL();
MenuURLState urlState = homeURL.getURLState(menu.getMenu_id());
Menu.setMenu_url(urlState.urlState());
menu.setMenu_url(menuId);
menu.setChannelName(c.getChannelName());
menuList.add(menu);
}
request.getSession().setAttribute(Consts.MENULIST, menuList);
}
catch (Exception e) {
e.printStackTrace();
}
return mapping.findForward("menu");
}
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
public IChannelService getChannelService() {
return channelService;
}
public void setChannelService(IChannelService channelService) {
this.channelService = channelService;
}
}