如何修改处理程序/委托设计模式
本文关键字:程序 设计模式 处理 何修改 修改 | 更新日期: 2023-09-27 18:19:35
假设您正在设计一个使用处理程序来处理特定抽象的应用程序。如果处理程序本身应该提供相同的功能,但在特定情况下,可能需要提供稍微更多的功能,这取决于源于父类的某组逻辑,那么正确的设计模式是什么?
class site
{
searchhandler ha = new searchhandler();
void search()
{
ha.search();
}
}
class searchhandler()
{
public void search()
{
//do work
}
}
site google = new site();
site yahoo = new site();
site bing = new site();
google.search();
yahoo.search();
bing.search();
换句话说,基于上面的代码,假设我需要在处理程序级别修改bing.search(),这样它的searchhandler.search(()实例就必须以某种方式被重写。实现这种方法的合适设计模式是什么?
如果我遇到你的问题,如果你遵循这个演示架构,你可以实现你想要的。定义如下所示的接口和类。
public interface ISearchEngine
{
void Search();
}
public class Site
{
ISearchEngine searchHandler = null;
public Site(ISearchEngine searchHandler )
{
this.searchHandler = searchHandler;
}
public void DoSearch()
{
searchHandler.Search();
}
}
public class GoogleSearch : ISearchEngine
{
public virtual void Search()
{
Console.Write("Google Search.");
}
}
public class YahooSearch : ISearchEngine
{
public virtual void Search()
{
Console.Write("Yahoo Search.");
}
}
public class BingSearch : ISearchEngine
{
public virtual void Search()
{
Console.Write("Bing Search.");
}
}
public class BingSearchV1 : BingSearch
{
public override void Search()
{
Console.Write("Bing V1 Search.");
}
}
你可以按如下方式使用它。。。
Site google = new Site(new GoogleSearch());
Site yahoo = new Site(new YahooSearch());
Site bing = new Site(new BingSearchV1());
google.DoSearch();
yahoo.DoSearch();
bing.DoSearch();
我希望你能得到答案。