CSharp: Builder Pattern

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/// <summary>
    /// Summary description for Equities.
    /// geovindu,Geovin Du,涂聚文
    /// 生成器(建造)模式(Builder Patterns)
    /// </summary>
    public abstract class Equities
    {
        protected ArrayList array;
 
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public abstract string ToString();
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public ArrayList getNames()
        {
            return array;
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
     
        public int count()
        {
            return array.Count;
        }
    }

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/// <summary>
  /// Summary description for Stocks.
  /// geovindu,Geovin Du,涂聚文
  /// 生成器(建造)模式(Builder Patterns)
  /// </summary>
  public class Stocks : Equities
  {
 
      /// <summary>
      ///
      /// </summary>
      public Stocks()
      {
          array = new ArrayList();
          array.Add("Cisco");
          array.Add("Coca Cola");
          array.Add("GE");
          array.Add("Harley Davidson");
          array.Add("IBM");
          array.Add("Microsoft");
      }
 
      /// <summary>
      ///
      /// </summary>
      /// <returns></returns>
      public override string ToString()
      {
          return "Stocks";
      }
  }

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/// <summary>
    /// Summary description for Bonds.
    /// geovindu,Geovin Du,涂聚文
    /// 生成器(建造)模式(Builder Patterns)
    /// </summary>
    public class Bonds : Equities
    {
 
        /// <summary>
        ///
        /// </summary>
        public Bonds()
        {
            array = new ArrayList();
            array.Add("CT GO 2005");
            array.Add("NY GO 2012");
            array.Add("GE Corp Bonds");
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return "Bonds";
        }
    }

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/// <summary>
    /// Summary description for Mutuals.
    /// geovindu,Geovin Du,涂聚文
    /// 生成器(建造)模式(Builder Patterns)
    /// </summary>
    public class Mutuals : Equities
    {
 
        /// <summary>
        ///
        /// </summary>
        public Mutuals()
        {
            array = new ArrayList();
            array.Add("Fidelity Magellan");
            array.Add("Lindner");
            array.Add("T Rowe Price");
            array.Add("Vanguard Primecap");
 
        }
 
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return "Mutuals";
        }
    }

  

1
2
3
4
5
6
7
8
9
10
11
/// <summary>
   /// Summary description for MultiChoice.
   /// geovindu,Geovin Du,涂聚文
   /// 生成器(建造)模式(Builder Patterns)
   /// </summary>
   public interface MultiChoice
   {
       ArrayList getSelected();
       void clear();
       Panel getWindow();
   }

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/// <summary>
    ///
    /// geovindu,Geovin Du,涂聚文
    /// 生成器(建造)模式(Builder Patterns)
    /// </summary>
    public class CheckChoice : MultiChoice
    {
        private ArrayList stocks;
        private Panel panel;
        private ArrayList boxes;
        /// <summary>
        ///
        /// </summary>
        /// <param name="stks"></param>
        public CheckChoice(Equities stks)
        {
            stocks = stks.getNames();
            panel = new Panel();
            boxes = new ArrayList();
            //add the check boxes to the panel
            for (int i = 0; i < stocks.Count; i++)
            {
                CheckBox ck = new CheckBox();
                //position them
                ck.Location = new Point(8, 16 + i * 32);
                string stk = (string)stocks[i];
                ck.Text = stk;
                ck.Size = new Size(112, 24);
                ck.TabIndex = 0;
                ck.TextAlign = ContentAlignment.MiddleLeft;
                boxes.Add(ck);
                panel.Controls.Add(ck);
            }
        }
    
        /// <summary>
        /// uncheck all check boxes
        /// </summary>
        public void clear()
        {
            for (int i = 0; i < boxes.Count; i++)
            {
                CheckBox ck = (CheckBox)boxes[i];
                ck.Checked = false;
            }
        }
     
        /// <summary>
        /// return list of checked items
        /// </summary>
        /// <returns></returns>
        public ArrayList getSelected()
        {
            ArrayList sels = new ArrayList();
            for (int i = 0; i < boxes.Count; i++)
            {
                CheckBox ck = (CheckBox)boxes[i];
                if (ck.Checked)
                {
                    sels.Add(ck.Text);
                }
            }
            return sels;
        }
     
        /// <summary>
        /// return panel of checkboxes
        /// </summary>
        /// <returns></returns>
        public Panel getWindow()
        {
            return panel;
        }
    }

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/// <summary>
   /// Summary description for ListChoice.
   /// geovindu,Geovin Du,涂聚文
   /// 生成器(建造)模式(Builder Patterns)
   /// </summary>
   /// creates a Panel containing a list box
   public class ListChoice : MultiChoice
   {
       private ArrayList stocks;
       private Panel panel;
       private ListBox list;
    
 
       /// <summary>
       /// constructor creates and loads the list box
       /// </summary>
       /// <param name="stks"></param>
       public ListChoice(Equities stks)
       {
           stocks = stks.getNames();
           panel = new Panel();
           list = new ListBox();
           list.Location = new Point(16, 0);
           list.Size = new Size(120, 160);
           list.SelectionMode = SelectionMode.MultiExtended;
           list.TabIndex = 0;
           panel.Controls.Add(list);
           for (int i = 0; i < stocks.Count; i++)
           {
               list.Items.Add(stocks[i]);
           }
       }
        
       /// <summary>
       /// returns the Panel
       /// </summary>
       /// <returns></returns>
       public Panel getWindow()
       {
           return panel;
       }
      
       /// <summary>
       /// returns an array of selected elements
       /// </summary>
       /// <returns></returns>
       public ArrayList getSelected()
       {
           ArrayList sels = new ArrayList();
           ListBox.SelectedObjectCollection coll = list.SelectedItems;
           for (int i = 0; i < coll.Count; i++)
           {
               string item = (string)coll[i];
               sels.Add(item);
           }
           return sels;
       }
     
       /// <summary>
       /// clear selected elements
       /// </summary>
       public void clear()
       {
           list.Items.Clear();
       }
   }

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/// <summary>
   /// Summary description for StockFactory.
   /// </summary>
   public class StockFactory
   {
 
       /// <summary>
       ///
       /// </summary>
       /// <param name="stocks"></param>
       /// <returns></returns>
       public static MultiChoice getBuilder(Equities stocks)
       {
           if (stocks.count() <= 3)
           {
               return new CheckChoice(stocks);
           }
           else
           {
               return new ListChoice(stocks);
           }
       }
   }

  

窗体调用测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/// <summary>
/// 建造者模式(Builder Pattern)
/// Geovin Du 涂聚文
/// </summary>
public partial class BuilderPatternsForm : Form
{
    private MultiChoice mchoice;
 
 
    /// <summary>
    ///
    /// </summary>
    private void init()
    {
        lsEquities.Items.Add(new Stocks());
        lsEquities.Items.Add(new Bonds());
        lsEquities.Items.Add(new Mutuals());
    }
    /// <summary>
    ///
    /// </summary>
    public BuilderPatternsForm()
    {
        InitializeComponent();
        init();
    }
 
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void BuilderPatternsForm_Load(object sender, EventArgs e)
    {
 
    }
    /// <summary>
    ///
    /// </summary>
    private void setPanel()
    {
        pnl.Location = new Point(152, 24);
        pnl.Size = new Size(128, 168);
        pnl.TabIndex = 1;
        Controls.Add(pnl);
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void lsEquities_SelectedIndexChanged(object sender, EventArgs e)
    {
        int i = lsEquities.SelectedIndex;
        Equities eq = (Equities)lsEquities.Items[i];
        mchoice = StockFactory.getBuilder(eq);
        this.Controls.Remove(pnl);
        pnl = mchoice.getWindow();
        setPanel();
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btPlot_Click(object sender, EventArgs e)
    {
        //display the selected items in a message box
        if (mchoice != null)
        {
            ArrayList ar = mchoice.getSelected();
            string ans = "";
            for (int i = 0; i < ar.Count; i++)
            {
                ans += (string)ar[i] + " ";
            }
            MessageBox.Show(null, ans, "Selected equities", MessageBoxButtons.OK);
        }
    }
}

  

输出:

 

posted @   ®Geovin Du Dream Park™  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2021-09-18 sql server: Parent/Child hierarchy tree view
2016-09-18 csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别
2015-09-18 sql:Oracle11g 表,视图,存储过程结构查询
2015-09-18 sql:MySQL 6.7 表,视图,存储过程结构查询
2010-09-18 csharp:DataRelation 对象访问相关数据表中的记录
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示