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

 

 

 

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

 

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

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:

   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:


   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:

   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: }

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

文章標籤
全站熱搜
創作者介紹
創作者 me1237guy 的頭像
me1237guy

天天向上

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