CSharp: Bridge 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
/// <summary>
 /// Summary description for VisList.
 /// 20220918
 /// geovindu,Geovin Du,涂聚文
 /// Bridge  Patterns桥接
 /// </summary>
 public interface VisList
 {
     //add a line to the display
     void addLine(Product p);
     //remove a line from the display
     void removeLine(int num);
 }
 
/// <summary>
 /// Summary description for Bridger.
 /// 20220918
 /// geovindu,Geovin Du,涂聚文
 /// Bridge  Patterns桥接
 /// </summary>
 //Bridge interface to display list classes
 public interface Bridger
 {
     void addData(ArrayList col);
 
 }

  

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/// <summary>
   /// A simple file handlng class
   /// 20220918
   /// geovindu,Geovin Du,涂聚文
   /// Bridge  Patterns桥接
   /// </summary>
   public class csFile
   {
       private string fileName;
       StreamReader ts;
       StreamWriter ws;
       private bool opened, writeOpened;
       /// <summary>
       ///
       /// </summary>
       public csFile()
       {
           init();
       }
       /// <summary>
       ///
       /// </summary>
       private void init()
       {
           opened = false;
           writeOpened = false;
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="file_name"></param>
       public csFile(string file_name)
       {
           fileName = file_name;
           init();
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="file_name"></param>
       /// <returns></returns>
       public bool OpenForRead(string file_name)
       {
           fileName = file_name;
           try
           {
               ts = new StreamReader(fileName);
               opened = true;
           }
           catch (FileNotFoundException)
           {
               return false;
           }
           return true;
       }
       /// <summary>
       ///
       /// </summary>
       /// <returns></returns>
       public bool OpenForRead()
       {
           return OpenForRead(fileName);
       }
       /// <summary>
       ///
       /// </summary>
       /// <returns></returns>
       public string readLine()
       {
           return ts.ReadLine();
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="s"></param>
       public void writeLine(string s)
       {
           ws.WriteLine(s);
       }
       /// <summary>
       ///
       /// </summary>
       public void close()
       {
           if (opened)
               ts.Close();
           if (writeOpened)
               ws.Close();
       }
       /// <summary>
       ///
       /// </summary>
       /// <returns></returns>
       public bool OpenForWrite()
       {
           return OpenForWrite(fileName);
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="file_name"></param>
       /// <returns></returns>
       public bool OpenForWrite(string file_name)
       {
           try
           {
               ws = new StreamWriter(file_name);
               fileName = file_name;
               writeOpened = true;
               return true;
           }
           catch (FileNotFoundException)
           {
               return false;
           }
       }
   }

  

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
81
82
83
84
85
86
    /// <summary>
    /// Summary description for Product.
    /// 20220918
    /// geovindu,Geovin Du,涂聚文
    /// Bridge  Patterns桥接
    /// </summary>
    public class Product : IComparable
    {
        private string quantity;
        private string name;
        /// <summary>
        ///
        /// </summary>
        /// <param name="line"></param>
        public Product(string line)
        {
            int i = line.IndexOf("--");
            name = line.Substring(0, i).Trim();
            quantity = line.Substring(i + 2).Trim();
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public string getQuantity()
        {
            return quantity;
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public string getName()
        {
            return name;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public int CompareTo(object p)
        {
            Product prod = (Product)p;
            return name.CompareTo(prod.getName());
        }
    }
 
/// <summary>
    /// Summary description for ProductList.
    /// 20220918
    /// geovindu,Geovin Du,涂聚文
    /// Bridge  Patterns桥接
    /// </summary>
    //A VisList class for the ListBox
    public class ProductList : VisList
    {
        private ListBox list;
        /// <summary>
        ///
        /// </summary>
        /// <param name="lst"></param>
        public ProductList(ListBox lst)
        {
            list = lst;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="p"></param>
        public void addLine(Product p)
        {
            list.Items.Add(p.getName());
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="num"></param>
        public void removeLine(int num)
        {
            if (num >= 0 && num < list.Items.Count)
            {
                list.Items.Remove(num);
            }
        }
    }

  

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
/// <summary>
   /// Summary description for SortBridge.
   /// 20220918
   /// geovindu,Geovin Du,涂聚文
   /// Bridge Patterns桥接
   /// </summary>
   public class SortBridge : ListBridge
   {
       /// <summary>
       ///
       /// </summary>
       /// <param name="v"></param>
       public SortBridge(VisList v)
           : base(v)
       {
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="ar"></param>
       public override void addData(ArrayList ar)
       {
           int max = ar.Count;
           Product[] prod = new Product[max];
           for (int i = 0; i < max; i++)
           {
               prod[i] = (Product)ar[i];
           }
           for (int i = 0; i < max; i++)
           {
               for (int j = i; j < max; j++)
               {
                   if (prod[i].CompareTo(prod[j]) > 0)
                   {
                       Product pt = prod[i];
                       prod[i] = prod[j];
                       prod[j] = pt;
                   }
               }
           }
           for (int i = 0; i < max; i++)
           {
               vis.addLine(prod[i]);
           }
       }
   }
 
/// <summary>
   /// Summary description for ListBridge.
   /// 20220918
   /// geovindu,Geovin Du,涂聚文
   /// Bridge  Patterns桥接
   /// </summary>
   public class ListBridge : Bridger
   {
       protected VisList vis;
       /// <summary>
       ///
       /// </summary>
       /// <param name="v"></param>
       public ListBridge(VisList v)
       {
           vis = v;
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="ar"></param>
       public virtual void addData(ArrayList ar)
       {
           for (int i = 0; i < ar.Count; i++)
           {
               Product p = (Product)ar[i];
               vis.addLine(p);
           }
       }
   }

  

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/// <summary>
   /// Summary description for GridList.
   /// 20220918
   /// geovindu,Geovin Du,涂聚文
   /// Bridge  Patterns桥接
   /// </summary>
   public class GridList : VisList
   {
       private DataGridView grid;
       private DataTable dtable;
       private GridAdapter gAdapter;
       //-----
       public GridList(DataGridView grd)
       {
           grid = grd;
           dtable = new DataTable("Products");
           DataColumn column = new DataColumn("ProdName");
           dtable.Columns.Add(column);
           column = new DataColumn("Qty");
           dtable.Columns.Add(column);
           grid.DataSource = dtable;
           gAdapter = new GridAdapter(grid);
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="p"></param>
       public void addLine(Product p)
       {
           gAdapter.Add(p);
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="num"></param>
       public void removeLine(int num)
       {
 
       }
   }
 
 
   /// <summary>
   /// Summary description for GridAdapter.
   /// 20220918
   /// geovindu,Geovin Du,涂聚文
   /// Bridge  Patterns桥接
   /// </summary>
   public class GridAdapter
   {
 
      // private DataGridView DataGrid
       private DataGridView grid;
       private DataTable dTable;
       private int row;
       /// <summary>
       ///
       /// </summary>
       /// <param name="grd"></param>
       public GridAdapter(DataGridView grd)
       {
           grid = grd;
           dTable = (DataTable)grid.DataSource;
           grid.MouseDown += new System.Windows.Forms.MouseEventHandler(Grid_Click);
           row = -1;
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       public void Grid_Click(object sender, System.Windows.Forms.MouseEventArgs e)
       {
           DataGridView.HitTestInfo hti = grid.HitTest(e.X, e.Y);
           if (hti.Type == DataGridViewHitTestType.Cell)    //HitTestType.Cell
           {
               row = hti.RowIndex;   // hti.Row;
           }
       }
 
       //private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
       //{
       //    // If the user right-clicks a cell, store it for use by the shortcut menu.
       //    if (e.Button == MouseButtons.Right)
       //    {
       //        DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y);
       //        if (hit.Type == DataGridViewHitTestType.Cell)
       //        {
       //            clickedCell =
       //                dataGridView1.Rows[hit.RowIndex].Cells[hit.ColumnIndex];
       //        }
       //    }
       //}
 
       /// <summary>
       ///
       /// </summary>
       /// <param name="p"></param>
       public void Add(Product p)
       {
           DataRow row = dTable.NewRow();
           row[0] = p.getName();
           row[1] = p.getQuantity();
           dTable.Rows.Add(row);
           dTable.AcceptChanges();
       }
       /// <summary>
       ///
       /// </summary>
       /// <returns></returns>
       public int SelectedIndex()
       {
           return row;
       }
       /// <summary>
       ///
       /// </summary>
       public void Clear()
       {
           int count = dTable.Rows.Count;
           for (int i = 0; i < count; i++)
           {
               dTable.Rows[i].Delete();
           }
       }
       /// <summary>
       ///
       /// </summary>
       public void clearSelection() { }
   }

  

窗体调用:

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
/// <summary>
   /// 20220918
   /// geovindu,Geovin Du,涂聚文
   /// Bridge  Patterns桥接
   /// </summary>
   public partial class BridgePatternsForm : Form
   {
 
       private ArrayList products;
       private VisList prodList, gridList;
       /// <summary>
       ///
       /// </summary>
       private void init()
       {
           products = new ArrayList();
           readFile(products); //read in the data file
           //create the product list
           prodList = new ProductList(lsProd);
           //Bridge to product VisList
           Bridger lbr = new SortBridge(prodList);
           //put the data into the product list
           lbr.addData(products);
           //create the grid VisList
           gridList = new GridList(grdProd);
           //Bridge to the grid list
           Bridger gbr = new SortBridge(gridList);
           //put the data into the grid display
           gbr.addData(products);
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="products"></param>
       private void readFile(ArrayList products)
       {
           csFile fl = new csFile("products.txt");
           fl.OpenForRead();
           string s = fl.readLine();
           while (s != null)
           {
               Product p = new Product(s);
               products.Add(p);
               s = fl.readLine();
           }
           fl.close();
       }
       /// <summary>
       ///
       /// </summary>
       public BridgePatternsForm()
       {
           InitializeComponent();
           init();
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void BridgePatternsForm_Load(object sender, EventArgs e)
       {
 
       }
   }

 输出:

 

posted @   ®Geovin Du Dream Park™  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2016-09-21 csharp: Oracle Stored Procedure DAL using ODP.NET
2014-09-21 Create a soft keyboard
2012-09-21 SQL 生成公曆和農曆對照數據續--创建萬年曆查找各種周期性節日數據
2010-09-21 Csharp,Javascript 获取显示器的大小的几种方式
2009-09-21 谷歌地图API学习
< 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
点击右上角即可分享
微信分享提示