c#设计模式==抽象工厂模式
2017-04-26 23:17
387 查看
抽象工厂模式,提供了一个创建一系列相关或相互依赖对象的接口,而无需指定具体的类。
我将三个工厂模式进行了一下对比,简单工厂模式虽说也实现了子例中实例化,但是每当增加或修改产品类时,工厂类也需跟着一起改,这样就违背了开放--封闭原则,不是非常理想。工厂方法模式已经实现了对工厂类的抽象,每当增加产品类时,只需增加一个工厂类的子类,这样就弥补了简单工厂的缺陷,但是其还不是最完美的。最完美的应当是抽象工厂模式了,抽象工厂模式是将抽象二字做到了完美的诠释,首先是不同产品类的抽象,其次是不同工厂类的抽象,还有就是产品不同系列的抽象,说句实在话,看这个抽象工厂模式的时候,尽管是第二次看了,但是还是感觉很绕。
作为一个初学者,我还是打算有机会把工厂方法模式用起来,抽象工厂对我来说还是有点困难,需要更多的时间去品味。第一次看这个抽象工厂时,脑子迷迷糊糊的,只知道是很多层次的抽象,但是具体的并没有理解透彻,这次第二次看的时候,开始有了一点感觉,开始慢慢的爱上这种跳跃的思维,突然感觉创造这些设计模式的人好强大,越是品味越是惊叹。
下面是我根据代码画出来到UML图:
我将三个工厂模式进行了一下对比,简单工厂模式虽说也实现了子例中实例化,但是每当增加或修改产品类时,工厂类也需跟着一起改,这样就违背了开放--封闭原则,不是非常理想。工厂方法模式已经实现了对工厂类的抽象,每当增加产品类时,只需增加一个工厂类的子类,这样就弥补了简单工厂的缺陷,但是其还不是最完美的。最完美的应当是抽象工厂模式了,抽象工厂模式是将抽象二字做到了完美的诠释,首先是不同产品类的抽象,其次是不同工厂类的抽象,还有就是产品不同系列的抽象,说句实在话,看这个抽象工厂模式的时候,尽管是第二次看了,但是还是感觉很绕。
作为一个初学者,我还是打算有机会把工厂方法模式用起来,抽象工厂对我来说还是有点困难,需要更多的时间去品味。第一次看这个抽象工厂时,脑子迷迷糊糊的,只知道是很多层次的抽象,但是具体的并没有理解透彻,这次第二次看的时候,开始有了一点感觉,开始慢慢的爱上这种跳跃的思维,突然感觉创造这些设计模式的人好强大,越是品味越是惊叹。
下面是我根据代码画出来到UML图:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 抽象工厂模式 { class Program { static void Main(string[] args) { IFactory fact = new MFactory(); Idepartment md = fact.createdepart(); md.Insert(); md.getuser(); Iuser mu = fact.createUser(); mu.Insert(); mu.getuser(); fact = new SFactory(); Idepartment sd = fact.createdepart(); sd.Insert(); sd.getuser(); Iuser su = fact.createUser(); su.Insert(); su.getuser(); } } } interface Iuser { void Insert(); void getuser(); } class MysqlUser : Iuser { public void Insert() { Console.Out.WriteLine("在MySql中给User表插入一条记录"); } public void getuser() { Console.Out.WriteLine("在MySql中根据ID获得User表一条记录"); } } class SqlserverUser : Iuser { public void Insert() { Console.Out.WriteLine("在Sqlserver中给User表插入一条记录"); } public void getuser() { Console.Out.WriteLine("在Sqlserver中根据ID获得User表一条记录"); } } interface Idepartment { void Insert(); void getuser(); } class Mysqldepart : Idepartment { public void Insert() { Console.Out.WriteLine("在MySql中给department表插入一条记录"); } public void getuser() { Console.Out.WriteLine("在MySql中根据ID获得department表一条记录"); } } class Sqlserverdepart : Idepartment { public void Insert() { Console.Out.WriteLine("在Sqlserver中给department表插入一条记录"); } public void getuser() { Console.Out.WriteLine("在Sqlserver中根据ID获得department表一条记录"); } } interface IFactory { Iuser createUser(); Idepartment createdepart(); } class MFactory : IFactory { public Iuser createUser() { return (new MysqlUser()); } public Idepartment createdepart() { return (new Mysqldepart()); } } class SFactory : IFactory { public Iuser createUser() { return (new SqlserverUser()); } public Idepartment createdepart() { return (new Sqlserverdepart()); } }
相关文章推荐
- 设计模式C#描述——抽象工厂模式
- 设计模式C#描述——抽象工厂模式
- c#设计模式--抽象工厂模式
- C#设计模式(4)——抽象工厂模式
- C#设计模式——抽象工厂模式(Abstract Factory Pattern)
- 设计模式C#描述——抽象工厂模式
- 【转】设计模式C#描述——抽象工厂模式
- C#设计模式编程之抽象工厂模式新解
- C#设计模式编程之抽象工厂模式新解
- C#设计模式(3):抽象工厂模式(Abstract Factory)(转载)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 转贴:C#设计模式编程之抽象工厂模式新解
- C# 设计模式 之 抽象工厂模式
- C#设计模式之工厂模式(Factory)--03 抽象工厂模式(Abstract Factory)
- [导入]C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
- C#设计模式之抽象工厂模式
- C#设计模式之3——抽象工厂模式
- C#设计模式之工厂模式(Factory)--04 抽象工厂模式中访问具体产品类的属性