Created
November 4, 2016 13:35
-
-
Save code-atom/6988cc63ff9f776964c12ba7fde55912 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
namespace Series | |
{ | |
public class SubMenuBuilder | |
{ | |
private ISubMenuHolder parentMenu; | |
public SubMenuBuilder(ISubMenuHolder menu) | |
{ | |
parentMenu = menu; | |
} | |
public SubMenuBuilder AddSubMenu(string name) | |
{ | |
var menu = new SimpleSubMenu { Name = name }; | |
menu.ParentId = ((Menu)parentMenu).Id; | |
parentMenu.AddSubMenu(menu); | |
return this; | |
} | |
public NestedSubMenuBuilder AddSubModule(string name) | |
{ | |
var menu = new NestedSubMenu { Name = name }; | |
menu.ParentId = ((Menu)parentMenu).Id; | |
parentMenu.AddSubMenu(menu); | |
return new NestedSubMenuBuilder(this, menu); | |
} | |
public class NestedSubMenuBuilder | |
{ | |
private SubMenuBuilder holder; | |
private ISubMenuHolder parentMenu; | |
public NestedSubMenuBuilder(SubMenuBuilder _holder, ISubMenuHolder _menu) | |
{ | |
holder = _holder; | |
parentMenu = _menu; | |
} | |
public NestedSubMenuBuilder AddSubMenu(string name) | |
{ | |
var menu = new SimpleSubMenu { Name = name }; | |
menu.ParentId = ((Menu)parentMenu).Id; | |
parentMenu.AddSubMenu(menu); | |
return this; | |
} | |
public NestedSubMenuBuilder AddSubModule(string name) | |
{ | |
var menu = new NestedSubMenu { Name = name }; | |
menu.ParentId = ((Menu)parentMenu).Id; | |
parentMenu.AddSubMenu(menu); | |
return new NestedSubMenuBuilder(new SubMenuBuilder(parentMenu), menu); | |
} | |
public SubMenuBuilder Build() | |
{ | |
return holder; | |
} | |
} | |
} | |
} | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
namespace Series | |
{ | |
public class TopMenu : Menu , ISubMenuHolder | |
{ | |
public TopMenu() | |
{ | |
SubMenus = new List<SubMenu>(); | |
} | |
public void AddSubMenu(SubMenu menu) | |
{ | |
SubMenus.Add(menu); | |
} | |
public List<SubMenu> SubMenus | |
{ | |
get; | |
set; | |
} | |
} | |
} | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
namespace Series | |
{ | |
public abstract class SubMenu : Menu | |
{ | |
public Guid ParentId | |
{ | |
get; | |
set; | |
} | |
} | |
} | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
namespace Series | |
{ | |
public class MenuDemo | |
{ | |
public static void Main(string[] args) | |
{ | |
var builder = new MenuBuilder(); | |
builder.AddMenu("Top1") | |
.AddSubMenu("Top1 -> Sub Menu 1") | |
.AddSubModule("Top1 -> SubModuleMenu 1") | |
.AddSubMenu("Top1 -> SubModule 1 -> Menu 1") | |
.AddSubMenu("Top1 -> SubModule 1 -> Menu 2") | |
.AddSubModule("Top1 -> SubModule 1 -> SubModuleMenu 1") | |
.AddSubMenu("Top1 -> SubModule 1 -> SubModule 1 -> Menu 1") | |
.AddSubMenu("Top1 -> SubModule 1 -> SubModule 1 -> Menu 2") | |
.AddSubMenu("Top1 -> SubModule 1 -> SubModule 1 -> Menu 3") | |
.Build() | |
.AddSubMenu("Top1 -> SubModule 1 -> Menu 3") | |
.AddSubMenu("Top1 -> SubModule 1 -> Menu 4") | |
.AddSubMenu("Top1 -> SubModule 1 -> Menu 5"); | |
} | |
} | |
} | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
namespace Series | |
{ | |
public class MenuBuilder | |
{ | |
List<Menu> menus = new List<Menu>(); | |
public SubMenuBuilder AddMenu(string name) | |
{ | |
var mainMenu = new TopMenu { Name = name }; | |
menus.Add(mainMenu); | |
return new SubMenuBuilder(mainMenu); | |
} | |
} | |
} | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
namespace Series | |
{ | |
public interface ISubMenuHolder | |
{ | |
List<SubMenu> SubMenus | |
{ | |
get; | |
set; | |
} | |
void AddSubMenu(SubMenu menu); | |
} | |
} | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
namespace Series | |
{ | |
public class SimpleSubMenu : SubMenu | |
{ | |
} | |
public class NestedSubMenu : SubMenu , ISubMenuHolder | |
{ | |
public NestedSubMenu() | |
{ | |
SubMenus = new List<SubMenu>(); | |
} | |
public List<SubMenu> SubMenus | |
{ | |
get; | |
set; | |
} | |
public void AddSubMenu(SubMenu menu) | |
{ | |
SubMenus.Add(menu); | |
} | |
} | |
} | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
namespace Series | |
{ | |
public abstract class SubMenu : Menu | |
{ | |
public Guid ParentId | |
{ | |
get; | |
set; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment