使用静态构造函数了解网关模式



我正在点击此链接: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;
}
}

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

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

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

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

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

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

第一次加载 Log 类时(第一次引用时),静态构造函数将运行,通过工厂的具体实现来初始化其logFactory

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

最新更新