li

ning
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

状态模式能解决这样的需求吗?

Posted on 2009-02-13 13:13  lining  阅读(1208)  评论(11编辑  收藏  举报

需求:左边列表项是有先后顺序的,必须得一个一个来看,就是必须要通过下一步(上一步)来控制显示。

         左边列表项和主显示区里的内容(web用户控件)是一一对应的。

变化点:左边列表项是有可能增加删除的,也有可能调整顺序。

界面如下:

image

 

我的思路:应用状态模式,把左边列表项的每一项看作一种状态。

我遇到的问题:如何访问控制这些控件。

 

 

--引用--------------------------------------------------
winter-cn: 状态模式做这个不合适
但是你这个需要很容易解决
--------------------------------------------------------
如果不考虑变化:是有可能增加删除的,也有可能调整顺序的话,
那就很好写,而且我现在的程序也在正常运行,现在我想把 

Code
/// <summary>
    
/// 设置步骤需要的内容控件显示
    
/// </summary>
    
/// <param name="name"></param>
    private void SetVisible(string name)
    {
        
if (name == Step.Tqxx)
        {
            StepTqxx.Visible 
= true//web用户控件
              BtTqxx.Visible = true//左边列表项
        }
        
else if (name == WebPrep.Arrange)
        {
            StepJtxx.Visible 
= true//web用户控件
              BtJtxx.Visible = true//左边列表项
        }
        
else
        {
        }
    }

这样的语句进行重构,

可是如下代码中 ,如何访问页面中的StepTqxx 等控件

Code
using System;
using System.Collections.Generic;
using System.Text;


namespace ClassLibrary1
{
    
//抽象类
    public abstract class MyState
    {
        
public abstract void Set();
    }

    
//天气信息
    public class TqxxState : MyState
    {
        
public override void Set()
        {
            
//这里如何访问页面中的StepTqxx,btTqxx等???????????????
        }
    }


    
//交通信息
    public class JtxxState : MyState
    {
        
public override void Set()
        {
            
//这里如何访问页面中的StepJtxx,JtTqxx等??????????????
        }
    }

    
public class Flow
    {
        
private MyState myState;

        
public Flow()
        {
            myState 
= new TqxxState();
        }

        
public void Set()
        {
            myState.Set();
        }
    }
}