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

时间:2012-11-27 13:28:36

标签: c# design-patterns gateway

我关注此链接: 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;
}
}

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

编辑:请忽略这一点,这是不正确的。我没有删除的唯一原因是我的评论回复指出的人可以留下来。

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

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

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

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