设计模式之:工厂方法模式FactoryMethodPattern的实现

博客 动态
0 166
羽尘
羽尘 2022-04-02 13:57:27
悬赏:0 积分 收藏

设计模式之:工厂方法模式FactoryMethodPattern的实现

本例用到了配置文件、接口、反射、多态;

满足的设计原则:

  • 通过工厂,实现创建对象和使用对象的分离,实现松耦合,满足迪米特法则
  • 通过配置文件指定创建对象类型,而不需更改源代码,满足开闭原则
  • 容易实现功能扩展,只需添加新的Logger实现类和新的Factory实现类即可,无须更改源代码,满足开闭原则
  • 面向接口编程,而不是面向具体实现类编程,满足依赖倒置原则
  • 面向接口编程,客户端实际使用的是实现类,用实现类替换接口类,满足里氏替换原则

类图 with StarUML

Logger接口及其实现类:

/// <summary>    /// LLogger接口    /// </summary>    internal interface Logger    {        void WriteLog();    }
    internal class FileLogger : Logger    {        public void WriteLog()        {            Console.WriteLine("文件日志记录");        }    }
    internal class DatabaseLogger : Logger    {        public void WriteLog()        {            Console.WriteLine("数据库日志记录");        }    }

Factory接口及其实现类:

    internal interface LoggerFactory    {        Logger CreateLogger();    }
    internal class FileLoggerFactory : LoggerFactory    {        public Logger CreateLogger()        {            return new FileLogger();        }    }
    internal class DatabaseLoggerFactory : LoggerFactory    {        public Logger CreateLogger()        {            return new DatabaseLogger();        }    }

配置文件:

<?xml version="1.0" encoding="utf-8" ?><configuration>	<appSettings>		<add key="factoryType" value="FactoryMethodPattern.DatabaseLoggerFactory"/>	</appSettings></configuration>

客户端:

    internal class Program    {        static void Main(string[] args)        {            LoggerFactory factory;            Logger logger;            //读取配置文件            string factoryType = ConfigurationManager.AppSettings["factoryType"];            //用反射创建对象            factory = Assembly.Load("FactoryMethodPattern").CreateInstance(factoryType) as LoggerFactory;            logger = factory.CreateLogger();            logger.WriteLog();            Console.Read();        }    }

 

运行结果:

posted @ 2022-04-02 13:46 张德长 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    羽尘

    羽尘 (王者 段位)

    2335 积分 (2)粉丝 (11)源码

     

    温馨提示

    亦奇源码

    最新会员