极速理解设计模式系列:10.抽象工厂模式(Abstract Factory Pattern)
2011-09-28 10:32
836 查看
五个角色:抽象产品角色(AbstractProduct)、具体产品角色(Product)、抽象工厂角色(AbstractFactory)、具体工厂角色(ConcreteFactory)、客户端(Client)
抽象产品角色(AbstractProduct):声明产品接口
具体产品角色(Product):实现产品的接口
抽象工厂角色(AbstractFactory):声明生成对应抽象产品的方法
具体工厂角色(ConcreteFactory):实现生成抽象产品方法,生成产品
客户端(Client):执行生产并运行产品
实现思路:客户端调用具体的工厂角色调用具体的产品角色。
[b]类图:[/b]
应用场景:我们需要在测试环境和正式环境使用不同的日志类写日志。
日志可以分为两大类,分别是写入数据库和写入txt文件的。
其中写入数据库的有通过Sql语句写入MS Sql Server和Linq写入MongoDB。
写入Txt有通过Log4Net方式和普通Stream流。
分析:我们构建两个Factory工厂分别是用与测试环境的日志记录工厂(MongDB和Stream流)和生 产环境的日志记录工厂(Mssql和Log4Net)。另外有两个抽象产品角色是:写入数据库、写入Txt。具体产品角色是MongDB方式、 Stream流、Mssql和Log4Net。
下面我们在控制台程序去演示一下如何使用Abstract Factory Patterns:
一、 抽象产品角色(AbstractProduct):
二、具体产品角色(Product):
三、抽象工厂角色(AbstractFactory):
四、具体工厂角色(ConcreteFactory):
五、客户端(Client):
如需源码请点击 AbstractFactoryPattern.rar 下载。
抽象产品角色(AbstractProduct):声明产品接口
具体产品角色(Product):实现产品的接口
抽象工厂角色(AbstractFactory):声明生成对应抽象产品的方法
具体工厂角色(ConcreteFactory):实现生成抽象产品方法,生成产品
客户端(Client):执行生产并运行产品
实现思路:客户端调用具体的工厂角色调用具体的产品角色。
[b]类图:[/b]
应用场景:我们需要在测试环境和正式环境使用不同的日志类写日志。
日志可以分为两大类,分别是写入数据库和写入txt文件的。
其中写入数据库的有通过Sql语句写入MS Sql Server和Linq写入MongoDB。
写入Txt有通过Log4Net方式和普通Stream流。
分析:我们构建两个Factory工厂分别是用与测试环境的日志记录工厂(MongDB和Stream流)和生 产环境的日志记录工厂(Mssql和Log4Net)。另外有两个抽象产品角色是:写入数据库、写入Txt。具体产品角色是MongDB方式、 Stream流、Mssql和Log4Net。
下面我们在控制台程序去演示一下如何使用Abstract Factory Patterns:
一、 抽象产品角色(AbstractProduct):
#region 抽象产品角色 //插入数据库的抽象产品角色 abstract class DataBaseProduct { public abstract void WriteToDatabaseLog(); } //写入Txt文件的抽象产品角色 abstract class TxtProduct { public abstract void WriteLogToTxt(); } #endregion
二、具体产品角色(Product):
#region 具体产品角色 //插入数据库的Sql Server方式产品角色 class LogToSqlProduct : DataBaseProduct { public override void WriteToDatabaseLog() { Console.WriteLine("通过Sql写入Sql Server数据库"); } } //插入数据库的Linq To MongoDb方式产品角色 class LogToMongoDBProduct : DataBaseProduct { public override void WriteToDatabaseLog() { Console.WriteLine("通过Linq写入MongoDB数据库"); } } //插入Txt文件的Log4Net方式产品角色 class LogToLog4NetProduct : TxtProduct { public override void WriteLogToTxt() { Console.WriteLine("通过Log4Net写入txt文件"); } } //插入Txt文件的Stream方式产品角色 class LogToStreamProduct : TxtProduct { public override void WriteLogToTxt() { Console.WriteLine("通过Stream写入txt文件"); } } #endregion
三、抽象工厂角色(AbstractFactory):
#region 抽象工厂角色 //日志工厂 abstract class LogFactory { public abstract DataBaseProduct GetDataBaseProduct(); public abstract TxtProduct GetTxtProduct(); } #endregion
四、具体工厂角色(ConcreteFactory):
#region 具体工厂角色 //用户测试环境的Log记录工厂类 class TestLogFactory : LogFactory { public override DataBaseProduct GetDataBaseProduct() { return new LogToMongoDBProduct(); } public override TxtProduct GetTxtProduct() { return new LogToStreamProduct(); } } //用户生产环境的Log记录工厂类 class ProductionLogFactory : LogFactory { public override DataBaseProduct GetDataBaseProduct() { return new LogToSqlProduct(); } public override TxtProduct GetTxtProduct() { return new LogToLog4NetProduct(); } } #endregion
五、客户端(Client):
#region 客户端 class program { static void Main(string[] args) { Console.WriteLine("在测试环境使用日志类记录日志到数据库和txt文件"); LogFactory logfactory = new TestLogFactory(); DataBaseProduct dataProduct = logfactory.GetDataBaseProduct(); TxtProduct txtProduct = logfactory.GetTxtProduct(); dataProduct.WriteToDatabaseLog(); txtProduct.WriteLogToTxt(); Console.WriteLine("---------------------------------------------------------"); Console.WriteLine("在生产环境使用日志类记录日志到数据库和txt文件"); logfactory = new ProductionLogFactory(); dataProduct = logfactory.GetDataBaseProduct(); txtProduct = logfactory.GetTxtProduct(); dataProduct.WriteToDatabaseLog(); txtProduct.WriteLogToTxt(); Console.ReadLine(); } } #endregion
如需源码请点击 AbstractFactoryPattern.rar 下载。
相关文章推荐
- 极速理解设计模式系列:10.抽象工厂模式(Abstract Factory Pattern)
- 极速理解设计模式系列:4.抽象工厂模式(Abstract Factory Pattern)
- [创建型模式系列]Abstract factory of Design Pattern模式设计之抽象工厂模式
- 我所理解的设计模式(C++实现)——抽象工厂模式(Abstract Factory Pattern)
- 我所理解的设计模式(C++实现)——抽象工厂模式(Abstract Factory Pattern)
- 极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)
- 极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)
- 极速理解设计模式系列:3.简单工厂模式(Simple Factory Pattern)
- 极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)
- 极速理解设计模式系列:2.观察者模式(Observer Pattern)
- Python实现设计模式--03.抽象工厂模式(Abstract Factory Pattern)
- 设计模式 - Abstract Factory Pattern(抽象工厂模式)
- 极速理解设计模式系列:20.模板方法模式(Template Method Pattern)
- java设计模式——抽象工厂模式(Abstract Factory Pattern)
- 设计模式——抽象工厂模式【Abstract Factory Pattern】
- 极速理解设计模式系列:23.装饰器模式(Decorator Pattern)
- 极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 极速理解设计模式系列:2.观察者模式(Observer Pattern)
- 设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)