一、抽象工厂模式简介(Bref Introduction

抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类。优点是:易于交换产品系列,由于具体工厂类在一个应该用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂类变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。抽象工厂的另一个优点是,它让具体的创建实例与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户的代码中。

二、解决的问题(What To Solve

       常用用于解决数据访问程序,也就是说程序通过使用抽象工厂模式后,可以灵活地在不同的数据库之间切换,而不需要费时费力地改变原有程序。

三、抽象工厂模式分析(Analysis

1、抽象工厂模式结构

Net设计模式之抽象工厂模式(Abstract Factory Pattern)(1)
 
IProductAIProductA接口:两个产品接口,他们都有可能有两种不同的实现。
ProductA1ProductA2ProductB1ProductB2具体实现类:对两个产品接口的具体分类的实现。
AbstractFactory抽象类:抽象工厂接口,它里面应该包含所有产品创建的抽象方法。
ConcreteFactory1ConcreteFactory2具体工厂类:创建具有特定实现的产品对象

2、源代码

1、产品接口IProductAIProductB及其两种实现
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,及其具体的工厂AbstractFactory1AbstractFactory2
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 Main(string[] args)
{
    //根据需求调用具体工厂AbstractFactory1
    AbstractFactory factory1 = new AbstractFactory1();
    IProductA productA1 = factory1.CreateProductA();
    IProductB productB1 = factory1.CreateProductB();
    productA1.Show();
    productB1.Insert();
    Console.WriteLine("\n");
    //根据需求调用具体工厂AbstractFactory2
    AbstractFactory factory2 = new AbstractFactory2();
    IProductA productA2 = factory2.CreateProductA();
    IProductB productB2 = factory2.CreateProductB();
    productA2.Show();
    productB2.Insert();
 
    Console.ReadKey();
}

3、程序运行结果











本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/260392,如需转载请自行联系原作者

相关文章:

  • 2021-08-18
  • 2021-05-28
  • 2021-10-30
  • 2022-02-17
  • 2021-07-27
  • 2021-05-03
  • 2022-01-10
猜你喜欢
  • 2022-01-02
  • 2021-04-27
  • 2021-04-26
  • 2021-11-08
  • 2021-11-17
相关资源
相似解决方案