CSharp: Prototype 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
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
/// <summary>
   /// Summary description for Swimmer
   /// geovindu,Geovin Du,涂聚文
   /// 原型模式(Prototype Patterns)
   /// </summary>
   public class Swimmer : IComparable
   {
       private string name;         //name
       private string lname, frname;//split names
       private int age;            //age
       private string club;        //club initials
       private float time;         //time achieved
       private bool female;        //sex
       /// <summary>
       ///
       /// </summary>
       public Swimmer() { }
       /// <summary>
       ///
       /// </summary>
       /// <param name="line"></param>
       public Swimmer(string line)
       {
           StringTokenizer tok = new StringTokenizer(line, ",");
           splitName(tok);
           age = Convert.ToInt32(tok.nextToken());
           club = tok.nextToken();
           time = Convert.ToSingle(tok.nextToken());
           string sx = tok.nextToken().ToUpper().Trim();
           female = sx.Equals("F");
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="tok"></param>
       private void splitName(StringTokenizer tok)
       {
           name = tok.nextToken();
           int i = name.IndexOf(" ");
           if (i > 0)
           {
               frname = name.Substring(0, i);
               lname = name.Substring(i + 1).Trim();
           }
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="swo"></param>
       /// <returns></returns>
       public int CompareTo(object swo)
       {
           Swimmer sw = (Swimmer)swo;
           return lname.CompareTo(sw.getLName());
       }
       /// <summary>
       ///
       /// </summary>
       /// <returns></returns>
       public bool isFemale()
       {
           return female;
       }
       /// <summary>
       ///
       /// </summary>
       /// <returns></returns>
       public int getAge()
       {
           return age;
       }
       /// <summary>
       ///
       /// </summary>
       /// <returns></returns>
       public float getTime()
       {
           return time;
       }
       /// <summary>
       ///
       /// </summary>
       /// <returns></returns>
       public string getName()
       {
           return name;
       }
       /// <summary>
       ///
       /// </summary>
       /// <returns></returns>
       public string getClub()
       {
           return club;
       }
       /// <summary>
       ///
       /// </summary>
       /// <returns></returns>
       public string getLName()
       {
           return lname;
       }
   }

  

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
/// geovindu,Geovin Du,涂聚文
/// 原型模式(Prototype 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 e)
        {
            Console.WriteLine(e.Message);
            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
/// <summary>
  /// String Tokenizer class
  /// geovindu,Geovin Du,涂聚文
  /// 原型模式(Prototype Patterns)
  /// </summary>
  public class StringTokenizer
  {
      private string data, delimiter;
      private string[] tokens;
      private int index;
      /// <summary>
      ///
      /// </summary>
      /// <param name="dataLine"></param>
      public StringTokenizer(string dataLine)
      {
          init(dataLine, " ");
      }
      /// <summary>
      ///
      /// </summary>
      /// <param name="dataLine"></param>
      /// <param name="delim"></param>
      private void init(String dataLine, string delim)
      {
          delimiter = delim;
          data = dataLine;
          tokens = data.Split(delimiter.ToCharArray());
          index = 0;
      }
      /// <summary>
      ///
      /// </summary>
      /// <param name="dataLine"></param>
      /// <param name="delim"></param>
      public StringTokenizer(string dataLine, string delim)
      {
          init(dataLine, delim);
      }
      /// <summary>
      ///
      /// </summary>
      /// <returns></returns>
      public bool hasMoreElements()
      {
          return (index < (tokens.Length));
      }
      /// <summary>
      ///
      /// </summary>
      /// <returns></returns>
      public string nextToken()
      {
          return nextElement();
      }
      /// <summary>
      ///
      /// </summary>
      /// <returns></returns>
      public string nextElement()
      {
          string s = tokens[index++];
          while ((s.Length <= 0) && (index < tokens.Length))
              s = tokens[index++];
          return s;
      }
  }

  

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
/// <summary>
 /// Summary description for SwimData.
 /// geovindu,Geovin Du,涂聚文
 /// 原型模式(Prototype Patterns)
 /// </summary>
 public class SwimData
 {
     protected ArrayList swdata;
     private int index;
     /// <summary>
     ///
     /// </summary>
     public SwimData()
     {
         swdata = new ArrayList();
     }
     /// <summary>
     ///
     /// </summary>
     /// <param name="swd"></param>
     public SwimData(ArrayList swd)
     {
         swdata = swd;
         index = 0;
     }
     /// <summary>
     ///
     /// </summary>
     /// <returns></returns>
     public int count()
     {
         return swdata.Count;
     }
     /// <summary>
     ///
     /// </summary>
     /// <param name="swdat"></param>
     public virtual void cloneMe(SwimData swdat)
     {
         swdata = new ArrayList();
         ArrayList swd = swdat.getData();
         //copy in swimmer objects
         for (int i = 0; i < swd.Count; i++)
             swdata.Add(swd[i]);
 
     }
     /// <summary>
     ///
     /// </summary>
     /// <param name="filename"></param>
     public SwimData(string filename)
     {
         swdata = new ArrayList();
         csFile fl = new csFile(filename);
         fl.OpenForRead();
         string s = fl.readLine();
         while (s != null)
         {
             Swimmer sw = new Swimmer(s);
             swdata.Add(sw);
             s = fl.readLine();
         }
         fl.close();
     }
     /// <summary>
     ///
     /// </summary>
     /// <returns></returns>
     public ArrayList getData()
     {
         return swdata;
     }
     /// <summary>
     ///
     /// </summary>
     public void moveFirst()
     {
         index = 0;
     }
     /// <summary>
     ///
     /// </summary>
     /// <returns></returns>
     public bool hasMoreElements()
     {
         return (index < swdata.Count);
     }
     /// <summary>
     ///
     /// </summary>
     public virtual void sort()
     {
         //sort using IComparable interface of Swimmer
         swdata.Sort(0, swdata.Count, null);
     }
     /// <summary>
     ///
     /// </summary>
     /// <returns></returns>
     public Swimmer getSwimmer()
     {
         if (index < swdata.Count)
             return (Swimmer)swdata[index++];
         else
             return null;
     }
 }

  

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
/// <summary>
  /// Summary description for SexSwimData.
  /// geovindu,Geovin Du,涂聚文
  /// 原型模式(Prototype Patterns)
  /// </summary>
  public class AgeSwimData : SwimData
  {
      ArrayList swd;
      public AgeSwimData()
      {
          swdata = new ArrayList();
      }
      /// <summary>
      ///
      /// </summary>
      /// <param name="filename"></param>
      public AgeSwimData(string filename) : base(filename) { }
      /// <summary>
      ///
      /// </summary>
      /// <param name="ssd"></param>
      public AgeSwimData(ArrayList ssd) : base(ssd) { }
      /// <summary>
      ///
      /// </summary>
      /// <param name="swdat"></param>
      public override void cloneMe(SwimData swdat)
      {
          swd = swdat.getData();
      }
      /// <summary>
      ///
      /// </summary>
      public override void sort()
      {
          Swimmer[] sws = new Swimmer[swd.Count];
          //copy in swimmer objects
          for (int i = 0; i < swd.Count; i++)
          {
              sws[i] = (Swimmer)swd[i];
          }
          //sort into increasing order
          for (int i = 0; i < sws.Length; i++)
          {
              for (int j = i; j < sws.Length; j++)
              {
                  if (sws[i].getAge() > sws[j].getAge())
                  {
                      Swimmer sw = sws[i];
                      sws[i] = sws[j];
                      sws[j] = sw;
                  }
              }
          }
          int age = sws[0].getAge();
          int agecount = 0;
          int k = 0;
          swdata = new ArrayList();
          bool quit = false;
 
          while (k < sws.Length && !quit)
          {
              while (sws[k].getAge() == age && !quit)
              {
                  agecount++;
                  if (k < sws.Length - 1)
                      k++;
                  else
                      quit = true;
              }
              //create a new Swimmer with a series of X's for a name
              //for each new age
              string name = "";
              for (int j = 0; j < agecount; j++)
                  name += "X";
              Swimmer sw = new Swimmer(age.ToString() + " " +
                  name + "," + age.ToString() + ",club,0,F");
              swdata.Add(sw);
              agecount = 0;
              if (quit)
                  age = 0;
              else
                  age = sws[k].getAge();
          }
 
      }
  }

  

窗体调用:

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
/// <summary>
/// geovindu,Geovin Du,涂聚文
/// 原型模式(Prototype Patterns)
/// </summary>
public partial class PrototypePatternsForm : Form
{
    private SwimData swdata;
    /// <summary>
    ///
    /// </summary>
    private void init()
    {
        swdata = new AgeSwimData("swimmers.txt");
        reload();
    }
    /// <summary>
    ///
    /// </summary>
    private void reload()
    {
        lsKids.Items.Clear();
        swdata.moveFirst();
        while (swdata.hasMoreElements())
        {
            Swimmer sw = swdata.getSwimmer();
            lsKids.Items.Add(sw.getName());
        }
 
    }
    /// <summary>
    ///
    /// </summary>
    public PrototypePatternsForm()
    {
        InitializeComponent();
        init();
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void PrototypePatternsForm_Load(object sender, EventArgs e)
    {
 
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btClone_Click(object sender, EventArgs e)
    {
        AgeSwimData newSd = new AgeSwimData();
        newSd.cloneMe(swdata);
        newSd.sort();
        lsNewKids.Items.Clear();
        while (newSd.hasMoreElements())
        {
            Swimmer sw = (Swimmer)newSd.getSwimmer();
            lsNewKids.Items.Add(sw.getName());
        }
    }
 
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btBack_Click(object sender, EventArgs e)
    {
        reload();
    }
 
 
}

  

输出:

 

posted @   ®Geovin Du Dream Park™  阅读(25)  评论(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
点击右上角即可分享
微信分享提示