0

我正在关注此链接: http ://codebetter.com/jpboodhoo/2007/10/15/the-static-gateway-pattern/ 以了解网关模式。

作者分享了一个“网关”记录器类和相关接口的示例:

public class Log
{
    private static ILogFactory logFactory;

    public static void InitializeLogFactory(ILogFactory logFactory)
    {
        Log.logFactory = logFactory;
    }

    public void InformationalMessage(string informationalMessage)
    {
        logFactory.Create().InformationalMessage(informationalMessage);
    }
}

public interface ILogFactory
{
    ILog Create();
}

public interface ILog
{
    void InformationalMessage(string message);
}

这是调用 API

public class Calculator
{                
public int Add(int number1,int number2)
{
Log.InformationalMessage("About to add two numbers");            
return number1 + number2;
}
}

我无法理解具体日志记录类的初始化发生在哪里。网关的入口点是什么?

4

3 回答 3

1

示例的布局方式有点欺骗性,因为 API 的调用与第一个示例更相关。请注意调用 init 的测试用例。此外,您将拥有作者没有的 Log 实例,在示例中更具象征意义。另一个选项是静态 Log 类。

于 2012-11-27T13:44:06.320 回答
1

关于接口的具体实现,文章底部有一些例子展示了它是如何实现的。

于 2012-11-27T14:29:53.457 回答
0

编辑:请忽略这个,这是不正确的。我不删除的唯一原因是我对指出它的人的评论可以继续。

请注意,“Log”类具有静态构造函数:

public static void InitializeLogFactory(ILogFactory logFactory)
    {
        Log.logFactory = logFactory;
    }

第一次Log加载类时(在第一次引用时),静态构造函数将运行,logFactory并使用工厂的具体实现对其进行初始化。

然后,每次InformationalMessage调用时,都会使用具体工厂来创建记录器的实例来记录消息。

于 2012-11-27T13:42:45.657 回答