(精华)2020年10月19日 设计模式案例 无极限菜单的实现(C#版)

举报
愚公搬代码 发表于 2021/10/19 22:57:27 2021/10/19
【摘要】 定义菜单类 /// <summary> /// 菜单信息 /// </summary> public class Menu { private...

定义菜单类

/// <summary>
    /// 菜单信息
    /// </summary>
    public class Menu
    {
		private string mu_id;           //菜单编号
		private string mu_name;         //菜单名称
		private string mu_parentid;     //父菜单编号
		private string mu_url;          //菜单url
		private string mu_level;        //菜单级别(1:一级菜单,2:二级菜单)
		private string mu_issub_node;   //是否有子节点
		private string mu_sort;         //菜单排序
		private string mu_remark;       //菜单备注
		private string mu_icon;         //菜单图片路径
		private List<Menu> child_menus = new List<Menu>(); //子菜单集合
		public string getMu_id()
		{
			return mu_id;
		}
		public void setMu_id(string mu_id)
		{
			this.mu_id = mu_id;
		}
		public string getMu_name()
		{
			return mu_name;
		}
		public void setMu_name(string mu_name)
		{
			this.mu_name = mu_name;
		}

		public string getMu_url()
		{
			return mu_url;
		}
		public void setMu_url(string mu_url)
		{
			this.mu_url = mu_url;
		}
		public string getMu_sort()
		{
			return mu_sort;
		}
		public void setMu_sort(string mu_sort)
		{
			this.mu_sort = mu_sort;
		}
		public string getMu_remark()
		{
			return mu_remark;
		}
		public void setMu_remark(string mu_remark)
		{
			this.mu_remark = mu_remark;
		}
		public string getMu_parentid()
		{
			return mu_parentid;
		}
		public void setMu_parentid(string mu_parentid)
		{
			this.mu_parentid = mu_parentid;
		}
		public string getMu_level()
		{
			return mu_level;
		}
		public void setMu_level(string mu_level)
		{
			this.mu_level = mu_level;
		}
		public string getMu_issub_node()
		{
			return mu_issub_node;
		}
		public void setMu_issub_node(string mu_issub_node)
		{
			this.mu_issub_node = mu_issub_node;
		}
		public List<Menu> getChild_menus()
		{
			return child_menus;
		}
		public void setChild_menus(List<Menu> child_menus)
		{
			this.child_menus = child_menus;
		}
		public string getMu_icon()
		{
			return mu_icon;
		}
		public void setMu_icon(string mu_icon)
		{
			this.mu_icon = mu_icon;
		}

	}

菜单服务

/// <summary>
/// 菜单服务
/// </summary>
public class MenuService
{
    /// <summary>
    /// 菜单集合
    /// </summary>
    private List<Menu> menus = new List<Menu>();

    /// <summary>
    /// 1、添加菜单
    /// </summary>
    public void AddMenu(Menu menu)
    {
        menus.Add(menu);
    }


    /// <summary>
    /// 2、查询所有菜单
    /// </summary>
    public List<Menu> GetMenus()
    {
        return menus;
    }


    /// <summary>
    /// 3、查询层级菜单
    /// </summary>
    /// <returns></returns>
    public List<Menu> GetHierarchicalMenu()
    {
        // 1、查询父级菜单
        MenuFilter menuFilter = new FirstLevelMenuFilter();
        List<Menu> firstMenus = menuFilter.FilterMenu(menus);

        // 2、查询子菜单菜单
        foreach (Menu menu in firstMenus)
        {
            SubMenuFilter subMenuFilter = new SubMenuFilter(menu.getMu_id());

            // 2.1 进行值填充
            menu.setChild_menus(subMenuFilter.FilterMenu(menus));
        }

        return firstMenus;
    }

}

菜单过滤

/// <summary>
/// 一级菜单过滤
/// </summary>
public class FirstLevelMenuFilter : MenuFilter
{
    private const string mu_level = "1";
    public List<Menu> FilterMenu(List<Menu> menus)
    {
        List<Menu> levelMenus = new List<Menu>();
        foreach (Menu menu in menus)
        {
            if (menu.Equals(mu_level))
            {
                levelMenus.Add(menu);
            }
        }
        return levelMenus;
    }
}
/// <summary>
/// 菜单过滤
/// </summary>
public interface MenuFilter
{
    /// <summary>
    /// 过滤菜单方法
    /// </summary>
    /// <param name="menus"></param>
    /// <returns></returns>
    public List<Menu> FilterMenu(List<Menu> menus);
}
/// <summary>
/// 子菜单过滤
/// </summary>
public class SubMenuFilter : MenuFilter
{
    private string mu_id;
    public SubMenuFilter(string mu_id)
    {
        this.mu_id = mu_id;
    }
    public List<Menu> FilterMenu(List<Menu> menus)
    {
        List<Menu> levelMenus = new List<Menu>();
        foreach (Menu menu in menus)
        {
            if (mu_id.Equals(menu.getMu_parentid()))
            {
                levelMenus.Add(menu);
            }
        }
        return levelMenus;
    }
}

使用

#region 4、菜单测试
{
    // 1、创建菜单
    Menu menu = new Menu();
    menu.setMu_id("1");
    menu.setMu_name("文件");
    menu.setMu_level("1");
    menu.setMu_url("/file.html");

    Menu menu2 = new Menu();
    menu.setMu_id("2");
    menu.setMu_name("编辑");
    menu.setMu_level("1");
    menu.setMu_url("/edit.html");


    Menu menu3 = new Menu();
    menu.setMu_id("3");
    menu.setMu_name("视图");
    menu.setMu_level("1");
    menu.setMu_url("/view.html");

    // 2、添加菜单
    MenuService menuService = new MenuService();
    menuService.AddMenu(menu);


}
#endregion

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/109171441

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。