(精华)2020年10月19日 设计模式案例 无极限菜单的实现(C#版)
【摘要】
定义菜单类
/// <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)