练习一个状态模式

 最近在学习状态模式
但是没有找到一个详细的例子
所以就随表找了一段代码来改一改
当然从简易程度上来说 这段代码没有必要改造 我只为练练手
当然也可以说这段代码可能不够典型 我只是为了体会一下
如果有什么地方不够到位 或是没有达到标准的地方还请各位不吝赐教
原代码:
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;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值