如何修改处理程序/委托设计模式

本文关键字:程序 设计模式 处理 何修改 修改 | 更新日期: 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();

我希望你能得到答案。