close

This tutorial is about composite pattern, which is my thoghts after watching the tutorial created by Christopher Okhravi.

image 

 

 

The desired ouput contents in form of html are shown below:

image

image

 

image

Create a new console project and add a interface item into it first.

image

TodoList portion:

   1: namespace CompositePatternConsole
   2: {
   3:     interface TodoList
   4:     {
   5:         void Add(TodoList todoList);
   6:         void Remove(TodoList todoList);
   7:         string GetHtml();
   8:     }
   9: }

Todo portion:

image

   1: namespace CompositePatternConsole
   2: {
   3:     class Todo : TodoList
   4:     {
   5:         string text;
   6:         public Todo(string _text)
   7:         {
   8:             this.text = _text;
   9:         }
  10:  
  11:         public void Add(TodoList todoList)
  12:         {
  13:             Console.WriteLine("Todo(leaf) cannot add anything.");
  14:             //throw new NotImplementedException();
  15:         }
  16:  
  17:         public string GetHtml()
  18:         {
  19:             return this.text;
  20:             //throw new NotImplementedException();
  21:         }
  22:  
  23:         public void Remove(TodoList todoList)
  24:         {
  25:             Console.WriteLine("Todo(leaf) cannot be removed.");
  26:         }
  27:     }
  28: }

Project portion:

image

   1: namespace CompositePatternConsole
   2: {
   3:     class Project : TodoList
   4:     {
   5:         string title;
   6:         IList<TodoList> todos =new List<TodoList>();
   7:         public Project(string title)
   8:         {
   9:             this.title = title;
  10:         }
  11:         public Project(IList<TodoList> _todos)
  12:         {
  13:             this.todos = _todos;
  14:         }
  15:  
  16:         public void Add(TodoList todoList)
  17:         {
  18:             todos.Add(todoList);
  19:         }
  20:  
  21:         public string GetHtml()
  22:         {
  23:             string html = "<hl>";
  24:                 html += this.title;
  25:                 html += "</hl><ul>";
  26:             foreach(TodoList tl in this.todos)
  27:             {
  28:                 html += "<li>";
  29:                 html += tl.GetHtml();
  30:                 html += "</li>";
  31:             }
  32:             html += "</ul>";
  33:             return html;
  34:         }
  35:  
  36:         public void Remove(TodoList todoList)
  37:         {
  38:             todos.Remove(todoList);
  39:         }
  40:     }
  41: }

Console portion:

The following is the architecture of above case:

image

   1: class Program
   2: {
   3:     static void Main(string[] args)
   4:     {
   5:         Project four_1 = new Project("Four-1");
   6:         four_1.Add(new Todo("Four 1-1"));
   7:         four_1.Add(new Todo("Four 1-2"));
   8:  
   9:         Project four_2 = new Project("Four-2");
  10:         four_2.Add(new Todo("Four 2-1"));
  11:         four_2.Add(new Todo("Four 2-2"));
  12:  
  13:         Project four = new Project("four");
  14:         four.Add(four_1);
  15:         four.Add(four_2);
  16:  
  17:         Project three = new Project("three");
  18:         three.Add(four);
  19:  
  20:         Project two = new Project("two");
  21:         two.Add(three);
  22:  
  23:         Project project = new Project("One");
  24:         project.Add(two);
  25:  
  26:         string html = project.GetHtml();
  27:         Console.WriteLine(html);
  28:         Console.ReadKey();
  29:  
  30:     }
  31: }

image

Copy the contents shown above and paste them in a html file, then you can see the results like this:

image

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 me1237guy 的頭像
    me1237guy

    天天向上

    me1237guy 發表在 痞客邦 留言(0) 人氣()