對於用戶要查找的條件的千變萬化,我們在寫條件去查找時,是不可能一下寫死的,那樣,如果你寫好了一個類讓別人用,別人需要的不是那種查詢,得去找你改條件.
那麼我們能否讓使用這個類的人自己定義一個規則(條件),直接傳條件給你,你幫我查詢出結果來,C#就可以用委託來解決,相應的java可以用接口來實現
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace FinderTest
{
//性別枚舉
public enum Genders
{
male=1,female=2
}
//學生類
public class Student
{
public Student()
{ }
public Student(int _id, string _name, Genders _gender, DateTime _birthday, string _telephone)
{
this._id = _id;//學生id
this._name = _name;//學生姓名
this._gender = _gender;//學生性別
this._birthday = _birthday;//學生生日
this._telephone = _telephone;//學生電話
}
int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
Genders _gender;
public Genders Gender
{
get { return _gender; }
set { _gender = value; }
}
DateTime _birthday;
public DateTime Birthday
{
get { return _birthday; }
set { _birthday = value; }
}
private string _telephone;
public string Telephone
{
get { return _telephone; }
set { _telephone = value; }
}
public void show()
{
Console.WriteLine(string.Format("我的姓名:{0}/t學號:{1}/t性別:{2}",_name,_id,_gender));
}
}
}
------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace FinderTest
{
//學期枚舉
public enum Semesters
{
x1 = 1, x2 = 2, x3 = 3
}
public delegate bool Predicate(Student s);//定義一個委託
//班級類
public class Class : ArrayList
{
public Class()
{ }
public Class(string _name, string _master, Semesters _semester)
{
this._name = _name;
this._master = _master;
this._semester = _semester;
_allStudents = new ArrayList();
}
private string _name;//班級名字
public string Name
{
get { return _name; }
set { _name = value; }
}
private string _master;//班長
public string Master
{
get { return _master; }
set { _master = value; }
}
private Semesters _semester;//學期
public Semesters Semester
{
get { return _semester; }
set { _semester = value; }
}
//班級裏的學生集合
ArrayList _allStudents;
public ArrayList AllStudents
{
get { return _allStudents; }
}
public ArrayList FindAll(Predicate match)
{
if (match == null)
{
return this._allStudents;
}
ArrayList result = new ArrayList();
for (int i = 0; i < this._allStudents.Count; i++)
{
Student one = (Student)this._allStudents[i];
if (match(one))
{
result.Add(one);
}
}
return result;
}
}
}
------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace FinderTest
{
class Program
{
static void Main(string[] args)
{
Class c1 = new Class("0603", "jsp", Semesters.x1);
Student s1 = new Student(1, "zs", Genders.male, DateTime.Parse("1988-02-23"), "13088522635");
Student s2 = new Student(2, "ls", Genders.female, DateTime.Parse("1986-12-03"), "13188522888");
Student s3 = new Student(3, "ww", Genders.female, DateTime.Parse("1988-11-15"), "13288576885");
Student s4 = new Student(4, "zl", Genders.male, DateTime.Parse("1984-02-21"), "13388534635");
Student s5 = new Student(5, "qq", Genders.female, DateTime.Parse("1988-02-23"), "13488524335");
Student s6 = new Student(6, "cb", Genders.male, DateTime.Parse("1989-02-23"), "13588527636");
c1.AllStudents.Add(s1);
c1.AllStudents.Add(s2);
c1.AllStudents.Add(s3);
c1.AllStudents.Add(s4);
c1.AllStudents.Add(s5);
c1.AllStudents.Add(s6);
ArrayList list= c1.FindAll(match);//查找班級女生的資料
// ArrayList list = c1.FindAll(match1);//查找學號從1到5的學生
foreach (Student s in list)
{
s.show();
}
}
//條件爲女性
public static bool match(Student s)
{
if (s.Gender.Equals(Genders.female))
{
return true;
}
return false;
}
//條件爲學號從1到5
public static bool match1(Student s)
{
if (s.Id.CompareTo(1) >= 0 && s.Id.CompareTo(5) <= 0)
{
return true;
}
return false;
}
}
}