Net设计模式之抽象工厂模式(Abstract Factory Pattern)(1)

简介:

一、抽象工厂模式简介(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 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 pr oductA2 = factory2.CreateProductA();
    IProductB productB2 = factory2.CreateProductB();
    productA2.Show();
    productB2.Insert();
 
    Console.ReadKey();
}

3、程序运行结果











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

目录
相关文章
|
4月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
4月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
41 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
4月前
|
设计模式 Java 应用服务中间件
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
37 1
|
26天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
16 1
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
46 0
|
16天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
22 0