定   义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

结构图

示例结构图:

实体类:

 class User
{
public int Id { get; set; }
public string Name { get; set; }
} class Department
{
public int Id { get; set; }
public string Name { get; set; }
}

数据访问接口:

 interface IUser
{
void Insert(User user); User GetUser(int id);
} interface IDepartment
{
void Insert(Department department); Department GetDepartment(int id);
}

User数据库访问具体类:

 class SqlServerUser : IUser
{
public void Insert(User user)
{
Console.WriteLine("向SqlServer数据库中User表添加新用户");
} public User GetUser(int id)
{
Console.WriteLine("根据用户Id从SqlServer数据库中获取User");
return null;
}
} class AccessUser : IUser
{
public void Insert(User user)
{
Console.WriteLine("向Access数据库中User表添加新用户");
} public User GetUser(int id)
{
Console.WriteLine("根据Id从Access数据库中获取User");
return null;
}
}

Department数据库访问具体类:

 class SqlServerDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("向SqlServer数据库Department表中添加一条新记录");
} public Department GetDepartment(int id)
{
Console.WriteLine("根据Id从SqlServer数据库Department表中部门信息");
return null;
}
} class AccessDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("向Access数据库Department表中添加一条新记录");
} public Department GetDepartment(int id)
{
Console.WriteLine("根据Id从Access数据库Department表中获得部门信息"); return null;
}
}

抽象工厂接口:

interface IFactory
{
IUser CreateUser(); IDepartment CreateDepartment();
}

SqlServerFactory类:

 class SqlServerFactory : IFactory
{
public IUser CreateUser()
{
return new SqlServerUser();
} public IDepartment CreateDepartment()
{
return new SqlServerDepartment();
}
}

AccessFactory类:

 class AccessFactory : IFactory
{
public IUser CreateUser()
{
return new AccessUser();
} public IDepartment CreateDepartment()
{
return new AccessDepartment();
}
}

客户端代码:

            User user = new User();
Department department=new Department (); IFactory factory = new SqlServerFactory();
IUser iu = factory.CreateUser();
IDepartment idepart = factory.CreateDepartment(); iu.Insert(user);
iu.GetUser(); idepart.Insert(department);
idepart.GetDepartment();

工厂方法模式和抽象工厂模式区别

反射+配置文件方式修改以上示例

结构图:

配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add  key="DBType" value="SqlServer"/>
  </appSettings>
</configuration>

DataAccess类:

class DataAccess
{
//程序集名称
private static readonly string AssemblyName = "DesignPatternControl";
//数据库类型
private static readonly string db = ConfigurationManager.AppSettings["DBType"]; public static IUser CreateUser()
{
string className = AssemblyName + "." + db + "User"; //具体数据库访问类名称
return (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
} public static IDepartment CreateDepartment()
{
string className = AssemblyName + "." + db + "Department"; //具体数据库访问类名称
return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className);
}
}

客户端调用:

 //反射+抽象方法
User user = new User();
Department department = new Department(); IUser iu = DataAccess.CreateUser();
iu.Insert(user);
iu.GetUser(); IDepartment id = DataAccess.CreateDepartment();
id.Insert(department);
id.GetDepartment();

设计模式:抽象工厂模式(Abstract Factory)的更多相关文章

  1. 设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

    抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2709 ...

  2. C#设计模式——抽象工厂模式(Abstract Factory Pattern)

    一.概述在软件开发中,常常会需要创建一系列相互依赖的对象,同时,由于需求的变化,往往存在较多系列对象的创建工作.如果采用常规的创建方法(new),会造成客户程序和对象创建工作的紧耦合.对此,抽象工厂模 ...

  3. Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)

    抽象工厂模式 理解了工厂方法模式,其实抽象工厂和工厂方法模式有很多的相似之处.抽象工厂同样是分离客户端对象的创建和逻辑代码的,但是抽象工厂往往是产生一组数据而不单单是产生一个产品. 抽象工厂提供一个创 ...

  4. 大话设计模式--抽象工厂模式 Abstract Factory -- C++实现实例

    1. 抽象工厂模式: 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类. 下面是工厂方法模式: 下面是抽象工厂模式: 和工厂方法模式相比 抽象工厂模式可以有多个Product抽象, ...

  5. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...

  6. 【设计模式】抽象工厂模式 Abstract Factory Pattern

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  7. .NET设计模式(2):1.2 抽象工厂模式(Abstract Factory)

    概述 抽象工厂模式(Abstract Factory)是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口 ...

  8. 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Messag ...

  9. 【UE4 设计模式】抽象工厂模式 Abstract Factory Pattern

    概述 描述 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类:具体的工厂负责实现具体的产品实例 抽象工厂中每个工厂可以创建多种产品(如苹果公司生产iPhone.iPad): 工厂方法 ...

  10. 抽象工厂模式(Abstract Factory)C#实例

    抽象工厂模式(Abstract Factory)C#实例 本文出处http://www.dofactory.com/net/abstract-factory-design-pattern 一.场景描述 ...

随机推荐

  1. BZOJ3784 : 树上的路径

    树的点分治,在分治的时候将所有点到根的距离依次放入一个数组q中. 对于一棵子树里的点,合法的路径一定是q[L]..q[R]的某个数加上自己到重心的距离. 定义五元组(v,l,m,r,w),表示当前路径 ...

  2. 十位一线专家分享Spark现状与未来----峰会摘录

    CSDN大数据技术: 十位一线专家分享Spark现状与未来(一) 十位一线专家分享Spark现状与未来(二) 十位一线专家分享Spark现状与未来(三) 部分摘录: 加州大学伯克利分校AMP实验室博士 ...

  3. topcoder 594 DIV2 foxandclassroom

    暴力枚举 1 #include <iostream> #include <vector> #include <string> using namespace std ...

  4. 【POJ】3150 Cellular Automaton(矩阵乘法+特殊的技巧)

    http://poj.org/problem?id=3150 这题裸的矩阵很容易看出,假设d=1,n=5那么矩阵是这样的 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 ...

  5. 【BZOJ】1146: [CTSC2008]网络管理Network(树链剖分+线段树套平衡树+二分 / dfs序+树状数组+主席树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1146 第一种做法(时间太感人): 第二种做法(rank5,好开心) ================ ...

  6. 【BZOJ】1041: [HAOI2008]圆上的整点(几何)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=1041 所谓的神题,我不会,直接题解..看了半天看懂题解了.详见hzwer博客 这题呢,我只能 ...

  7. 【Vijos】1792 摆花

    题目链接:https://vijos.org/p/1792 算法:DP 看到这题真的一点不会...只能爆搜一下..但太太慢了..看了题解后,听说是分组背包??不知道.. 好吧,,还是百度了下题解,渐渐 ...

  8. Splay 伸展树

    废话不说,有篇论文可供参考:杨思雨:<伸展树的基本操作与应用> Splay的好处可以快速分裂和合并. ===============================14.07.26更新== ...

  9. 搭建你的第一个Django应用程序

    首先你要确保你机器上面安装了python:Python开发_python的安装 python的相关学习资料:http://www.cnblogs.com/hongten/tag/python/ 其次, ...

  10. Why NHibernate updates DB on commit of read-only transaction

    http://www.zvolkov.com/clog/2009/07/09/why-nhibernate-updates-db-on-commit-of-read-only-transaction/ ...