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

时间:2014-08-27 18:22:53

标签: c#

假设您正在设计一个使用处理程序来处理特定抽象的应用程序。如果处理程序本身应该提供相同的功能,那么正确的设计模式是什么,但在特定情况下可能需要提供稍微更多的功能,这取决于源自父类的一些逻辑集?

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()实例。实施这种方法的适当设计模式是什么?

1 个答案:

答案 0 :(得分:0)

如果我遇到了您的问题,如果您遵循此演示架构,您可以实现您想要的。定义接口和类,如下所示。

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();

我希望你得到答案。