一、抽象工厂模式简介(Bref Introduction)
抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类。优点是:易于交换产品系列,由于具体工厂类在一个应该用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂类变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。抽象工厂的另一个优点是,它让具体的创建实例与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户的代码中。
二、解决的问题(What To Solve)
常用用于解决数据访问程序,也就是说程序通过使用抽象工厂模式后,可以灵活地在不同的数据库之间切换,而不需要费时费力地改变原有程序。
三、抽象工厂模式分析(Analysis)
1、抽象工厂模式结构
IProductA、IProductA接口:两个产品接口,他们都有可能有两种不同的实现。
ProductA1、ProductA2,ProductB1、ProductB2具体实现类:对两个产品接口的具体分类的实现。
AbstractFactory抽象类:抽象工厂接口,它里面应该包含所有产品创建的抽象方法。
ConcreteFactory1、ConcreteFactory2具体工厂类:创建具有特定实现的产品对象
2、源代码
1、产品接口IProductA、IProductB及其两种实现 |
public interface IProductA { void Show(); }
public class ProductA1 : IProductA { public void Show() { Console.WriteLine("具体产品类{0}展示方法。",this.GetType().Name); } }
public class ProductA2 : IProductA { public void Show() { Console.WriteLine("具体产品类{0}展示方法。", this.GetType().Name); } }
public interface IProductB { void Insert(); }
public class ProductB1 : IProductB { public void Insert() { Console.WriteLine("具体产品类{0}插入方法。", this.GetType().Name); } }
public class ProductB2 : IProductB { public void Insert() { Console.WriteLine("具体产品类{0}插入方法。", this.GetType().Name); } } |
2、抽象工厂接口AbstractFactory,及其具体的工厂AbstractFactory1、AbstractFactory2 |
public abstract class AbstractFactory { public abstract IProductA CreateProductA(); public abstract IProductB CreateProductB(); }
public class AbstractFactory1:AbstractFactory {
public override IProductA CreateProductA() { IProductA productA1 = new ProductA1(); return productA1; }
public override IProductB CreateProductB() { IProductB productB1 = new ProductB1(); return productB1; } }
public class AbstractFactory2 : AbstractFactory {
public override IProductA CreateProductA() { IProductA productA2 = new ProductA2(); return productA2; }
public override IProductB CreateProductB() { IProductB productB2 = new ProductB2(); return productB2; } } |
3、客户端代码 |
||
static void
{< |