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); } } } |
输出:
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
分类:
CSharp code
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 对象访问相关数据表中的记录