`
无量胖佛
  • 浏览: 973 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

用一用状态模式

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



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wddsmzx/archive/2009/11/16/4817048.aspx
分享到:
评论

相关推荐

    55-Java设计模式之策略模式与状态模式1

    同时,策略模式需要客户端指定用哪个策略,而状态模式则是由 Context 根据内部的状态变化进行处理和切换。 策略模式和状态模式都是 Java 设计模式中的重要组成部分,它们可以帮助我们解决复杂的问题,使得代码更加...

    c++状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在C++中,状态模式通常通过定义一系列的类来表示各种状态,并用一个上下文类来管理这些状态的切换。下面将详细...

    设计模式-状态模式分享ppt

    状态模式是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为。该模式的核心思想是定义一系列的状态类,并将这些状态类封装起来,使得外部客户端无需关心对象的具体状态即可调用相应的方法。 ####...

    设计模式之状态模式实例

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得代码更易于理解和维护。在这个实例中,我们将通过Java来深入理解并应用...

    java 设计模式之状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,看起来好像对象改变了它的类。在Java中,状态模式通常通过定义不同的状态类和一个上下文类来实现,其中上下文类持有状态对象并调用其方法来响应...

    JAVA设计模式之行为模式 责任链模式和状态模式

    在实现状态模式时,通常会有一个上下文类(Context),它维护一个当前状态对象,并通过这个对象调用相应的行为。而状态类(State)定义了一组相关状态的行为,每个具体状态类实现这些行为。 总结来说,责任链模式...

    Android编程设计模式之状态模式详解

    状态模式在Android编程中是一种非常重要的设计模式,它主要用于处理对象在不同状态下的不同行为。状态模式的核心思想是将每一种状态封装成一个类,使得对象可以在运行时根据其内部状态的变化来改变其行为。 一、...

    java设计模式之状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得代码更易于理解和维护。在Java中,状态模式通常通过实现接口或者继承抽象...

    设计模式之状态模式State

    状态模式是一种行为设计模式,它使你能在运行时改变对象的行为。在状态模式中,一个对象的状态变化可以导致其行为的变化。这种模式常用于当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变其行为的...

    设计模式:状态模式TCPConnection案例

    状态模式是一种行为设计模式,它使你能在运行时改变对象的行为。在TCP连接中,状态模式的应用尤为常见,因为TCP连接在不同的阶段会有不同的行为,比如建立连接、数据传输、断开连接等。下面我们将详细探讨这个模式...

    设计模式 - 状态模式(C++实例)

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态转换逻辑,使代码结构更清晰,易于理解和维护。 在C++中实现状态模式,我们通常会...

    设计模式的状态模式的例子

    状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,使得对象看起来好像修改了它的类。这种模式通常用于当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变来改变其行为时。在这个...

    状态模式的一种实现,类似于状态机

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于模拟具有多种行为且行为随其内部状态改变的对象,例如,一个订单在不同的状态下(如待支付、已支付...

    设计模式之状态模式(State)

    状态模式是一种行为设计模式,它使对象能够在内部状态改变时改变其行为,看起来好像改变了它的类。这种模式常用于处理对象在不同状态下表现各异的情况,避免了复杂的条件语句,提高了代码的可读性和可维护性。 在...

    状态模式实例(电梯)

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于模拟对象不同状态下的不同行为,使得代码更加灵活且易于维护。 在“状态模式实例(电梯)”中,...

    设计模式C++学习之状态模式(State)

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,并且使代码结构清晰,易于维护。 在C++中,状态模式通常包含以下几个关键...

    java-设计模式-状态模式-模拟审批流程-二级审批 完整代码

    这个压缩包文件包含了一个用状态模式实现的审批流程的完整代码。 在审批流程中,通常有多个状态,比如“待提交”、“一级审批中”、“一级审批通过”、“一级审批拒绝”、“二级审批中”和“审批完成”。每个状态...

    状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得代码更易于理解和维护。在这个场景中,我们关注的是如何在不违反单一职责...

    设计模式专题之(二十一)状态模式---设计模式状态模式示例代码(python--c++)

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得对象的行为与其状态紧密相关,通过改变对象的状态,来改变对象的行为。 ...

Global site tag (gtag.js) - Google Analytics