最近在学习状态模式
但是没有找到一个详细的例子
所以就随表找了一段代码来改一改
当然从简易程度上来说 这段代码没有必要改造 我只为练练手
当然也可以说这段代码可能不够典型 我只是为了体会一下
如果有什么地方不够到位 或是没有达到标准的地方还请各位不吝赐教
原代码:
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
分享到:
相关推荐
同时,策略模式需要客户端指定用哪个策略,而状态模式则是由 Context 根据内部的状态变化进行处理和切换。 策略模式和状态模式都是 Java 设计模式中的重要组成部分,它们可以帮助我们解决复杂的问题,使得代码更加...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在C++中,状态模式通常通过定义一系列的类来表示各种状态,并用一个上下文类来管理这些状态的切换。下面将详细...
状态模式是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为。该模式的核心思想是定义一系列的状态类,并将这些状态类封装起来,使得外部客户端无需关心对象的具体状态即可调用相应的方法。 ####...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得代码更易于理解和维护。在这个实例中,我们将通过Java来深入理解并应用...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,看起来好像对象改变了它的类。在Java中,状态模式通常通过定义不同的状态类和一个上下文类来实现,其中上下文类持有状态对象并调用其方法来响应...
在实现状态模式时,通常会有一个上下文类(Context),它维护一个当前状态对象,并通过这个对象调用相应的行为。而状态类(State)定义了一组相关状态的行为,每个具体状态类实现这些行为。 总结来说,责任链模式...
状态模式在Android编程中是一种非常重要的设计模式,它主要用于处理对象在不同状态下的不同行为。状态模式的核心思想是将每一种状态封装成一个类,使得对象可以在运行时根据其内部状态的变化来改变其行为。 一、...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得代码更易于理解和维护。在Java中,状态模式通常通过实现接口或者继承抽象...
状态模式是一种行为设计模式,它使你能在运行时改变对象的行为。在状态模式中,一个对象的状态变化可以导致其行为的变化。这种模式常用于当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变其行为的...
状态模式是一种行为设计模式,它使你能在运行时改变对象的行为。在TCP连接中,状态模式的应用尤为常见,因为TCP连接在不同的阶段会有不同的行为,比如建立连接、数据传输、断开连接等。下面我们将详细探讨这个模式...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态转换逻辑,使代码结构更清晰,易于理解和维护。 在C++中实现状态模式,我们通常会...
状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,使得对象看起来好像修改了它的类。这种模式通常用于当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变来改变其行为时。在这个...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于模拟具有多种行为且行为随其内部状态改变的对象,例如,一个订单在不同的状态下(如待支付、已支付...
状态模式是一种行为设计模式,它使对象能够在内部状态改变时改变其行为,看起来好像改变了它的类。这种模式常用于处理对象在不同状态下表现各异的情况,避免了复杂的条件语句,提高了代码的可读性和可维护性。 在...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于模拟对象不同状态下的不同行为,使得代码更加灵活且易于维护。 在“状态模式实例(电梯)”中,...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,并且使代码结构清晰,易于维护。 在C++中,状态模式通常包含以下几个关键...
这个压缩包文件包含了一个用状态模式实现的审批流程的完整代码。 在审批流程中,通常有多个状态,比如“待提交”、“一级审批中”、“一级审批通过”、“一级审批拒绝”、“二级审批中”和“审批完成”。每个状态...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得代码更易于理解和维护。在这个场景中,我们关注的是如何在不违反单一职责...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得对象的行为与其状态紧密相关,通过改变对象的状态,来改变对象的行为。 ...
状态模式在软件设计中是一种非常实用的模式,尤其是在处理具有多状态、且状态间相互转换的对象时。在《Java 23种设计模式24状态模式.pdf》中,作者通过详细的讲解和实例,深入探讨了状态模式的概念、动机、结构、...