我想问一下您的意见,在场景中使用桥接模式是否好。我们需要开发一个通用的搜索UI,它可以接受不同的搜索参数,并根据这些参数调用不同的服务。例如:如果参数是FIN number和人名,那么我们必须调用PersonService进行搜索。
为了使类型安全,我考虑使用桥接模式,在这里抽象和实现可以独立工作。
在实现了下面的代码之后,我觉得我在强迫自己在这个场景中使用这个模式,即使这个模式不适合这个场景。。。
你们怎么看?有没有办法改变代码使其更好?或者这种模式根本不能用于这种情况?
抽象类搜索引擎{
公共抽象IList查询();
}
class PersonSearchEngine : SearchEngine<Person> {
private DataQuery<Person> dataQuery;
public PersonSearchEngine(DataQuery<Person> dataQuery){
this.dataQuery = dataQuery;
}
public string FIN { set; get; }
public string Name { set; get; }
public override IList<Person> Query() {
return dataQuery.Query(new Person() { FIN = this.FIN, Name = this.Name });
}
}
class LocationSearchEngine : SearchEngine<House> {
private DataQuery<House> dataQuery;
public LocationSearchEngine(DataQuery<House> dataQuery) {
this.dataQuery = dataQuery;
}
public string BlockNumber { set; get; }
public string StreetName { set; get; }
public string HouseNumber { set; get; }
public string PostalCode { set; get; }
public override IList<House> Query() {
return dataQuery.Query(new House() { BlockNumber = this.BlockNumber, StreetName = this.StreetName, HouseNumber = this.HouseNumber, PostalCode = this.PostalCode});
}
}
abstract class DataQuery<T>{
public abstract IList<T> Query(T arg) ;
}
class PersonDataQuery : DataQuery<Person> {
public override IList<Person> Query(Person arg) {
Console.WriteLine("Searching Person.....");
return null;
}
}
class LocationDataQuery : DataQuery<House> {
public override IList<House> Query(House arg) {
Console.WriteLine("Searching Location.....");
return null;
}
}
class Person {
public string FIN { get; set; }
public string Name { get; set; }
}
class House {
public string BlockNumber { set; get; }
public string StreetName { set; get; }
public string HouseNumber { set; get; }
public string PostalCode { set; get; }
}
用法:
SearchEngine<Person> searchEngine = new PersonSearchEngine(new PersonDataQuery());
searchEngine.Query();
Console.ReadKey();