设计模式学习笔记--抽象工厂模式

 1 using System;
 2
 3 namespace AbstractFactory
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/5/28 10:23:20
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// User说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class User
12     {
13         private int id;
14
15         public int Id
16         {
17             get { return id; }
18             set { id = value; }
19         }
20
21         private string name;
22
23         public string Name
24         {
25             get { return name; }
26             set { name = value; }
27         }
28     }
29 }

 1 using System;
 2
 3 namespace AbstractFactory
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/5/28 10:38:21
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// Department说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class Department
12     {
13         private int id;
14
15         public int Id
16         {
17             get { return id; }
18             set { id = value; }
19         }
20
21         private string departmentName;
22
23         public string DepartmentName
24         {
25             get { return departmentName; }
26             set { departmentName = value; }
27         }
28     }
29 }

1 namespace AbstractFactory
2 {
3     public interface IUser
4     {
5         void Insert(User user);
6         User GetUser(int id);
7     }
8 }

1 namespace AbstractFactory
2 {
3     public interface IDepartment
4     {
5         void Insert(Department department);
6         Department GetDepartment(int id);
7     }
8 }

 1 using System;
 2
 3 namespace AbstractFactory
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/5/28 11:23:53
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// SqlServerUser说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class SqlServerUser:IUser
12     {
13         public void Insert(User user)
14         {
15             Console.WriteLine("在SQL Server中给User表增加了一条记录");
16         }
17
18         public User GetUser(int id)
19         {
20             Console.WriteLine("在SQL Server中根据ID得到User表一条记录");
21             return null;
22         }
23     }
24 }

 1 using System;
 2
 3 namespace AbstractFactory
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/5/28 10:40:10
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// SqlServerDepartment说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class SqlServerDepartment:IDepartment
12     {
13         public void Insert(Department department)
14         {
15             Console.WriteLine("在SQL Server中给Department表增加了一条记录");
16         }
17
18         public Department GetDepartment(int id)
19         {
20             Console.WriteLine("在SQL Server中根据ID得到Department表一条记录");
21             return null;
22         }
23     }
24 }

 1 using System;
 2
 3 namespace AbstractFactory
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/5/28 10:30:42
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// AccessUser说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class AccessUser:IUser
12     {
13         public void Insert(User user)
14         {
15             Console.WriteLine("在Access中给User表增加了一条记录");
16         }
17
18         public User GetUser(int id)
19         {
20             Console.WriteLine("在Access中根据ID得到User表一条记录");
21             return null;
22         }
23     }
24 }

 1 using System;
 2
 3 namespace AbstractFactory
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/5/28 10:41:39
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// AccessDepartment说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class AccessDepartment:IDepartment
12     {
13         public void Insert(Department department)
14         {
15             Console.WriteLine("在Access中给Department表增加了一条记录");
16         }
17
18         public Department GetDepartment(int id)
19         {
20             Console.WriteLine("在Access中根据ID得到Department表一条记录");
21             return null;
22         }
23     }
24 }

 1 using System;
 2 using System.Reflection;
 3 using System.Configuration;
 4
 5 namespace AbstractFactory
 6 {
 7     /// <summary>
 8     /// 作者:bzyzhang
 9     /// 时间:2016/5/28 10:52:18
10     /// 博客地址:http://www.cnblogs.com/bzyzhang/
11     /// DataAccess说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
12     /// </summary>
13     public class DataAccess
14     {
15         private static readonly string AssemblyName = "AbstractFactory";
16         //private static readonly string db = "SqlServer";
17         private static readonly string db = ConfigurationManager.AppSettings["DB"];
18
19         public static IUser CreateUser()
20         {
21             string className = AssemblyName + "." + db + "User";
22             return (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
23         }
24
25         public static IDepartment CreateDepartment()
26         {
27             string className = AssemblyName + "." + db + "Department";
28             return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className);
29         }
30     }
31 }

 1 namespace AbstractFactory
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             User user = new User();
 8             Department dept = new Department();
 9
10             IUser iu = DataAccess.CreateUser();
11             iu.Insert(user);
12             iu.GetUser(1);
13
14             IDepartment id = DataAccess.CreateDepartment();
15             id.Insert(dept);
16             id.GetDepartment(1);
17         }
18     }
19 }

1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3   <startup>
4     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
5   </startup>
6   <appSettings>
7     <add key="DB" value="SqlServer"/>
8   </appSettings>
9 </configuration>

时间: 2024-12-28 20:58:26

设计模式学习笔记--抽象工厂模式的相关文章

设计模式学习03—抽象工厂模式

1.动机与定义 工厂模式中,一个工厂仅仅能提供一个或一类产品,当产品种类较多,形成产品系列(比方我们要创建跨平台的button,菜单,文本框等等一系列GUI控件: 单纯使用工厂模式会产生大量工厂,并且后期维护也不方便,我们能够从产品中找到规律,假设产品等级相对固定,以后仅仅会新增产品族,那么我们就能够把整个产品族放到一个工厂创建,以后新增其它系统产品族也很方便,例如以下图: 这样的模式就是抽象工厂,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则须要面对多个产品等级结构,一个工厂等级结构能

设计模式学习-抽象工厂模式

1.定义 提供接口,创建一系列相关或独立的对象,而不指定这些对象的具体类. 2.类图 3.代码示例 1 package com.zhaoyangwoo.abstractfactory; 2 3 /** 4 * Created by john on 16/5/2. 5 * @author wuzhaoyang 6 * <p> 7 * 抽象工厂:多个抽象产品类,派生出多个具体产品类:一个抽象工厂类,派生出多个具体工厂类:每个具体工厂类可创建多个具体产品类的实例. 8 * 即提供一个创建一系列相关或

设计模式学习之抽象工厂模式

抽象工厂模式定义:Provide an interface for creating families of related or dependent objects without specifying their concrete classes. (为创建一组相关或互相依赖的对象提供一个接口,而且无需指定他们的具体类) 上一章学习了工厂模式,这两个模式有很大的相似的地方,但是使用的情景不一样,所以要采用不一样方式.对比下这两个模式: 工厂模式                       

设计模式学习笔记——抽象工厂

1.特点:当工厂方法无法满足多系列问题时,再重构为抽象工厂. 2.概念:抽象工厂模式为一个产品家族提供了统一的创建接口.当需要这个产品家族的某一系列的时候,可以从抽象工厂中选出相对应的系列来创建一个具体的工厂类别. 3.类图: 4.程序实现: /// <summary> /// 抽象工厂类 /// </summary> public interface IDatabaseFactory { IEmployee CreateEmployee(); IUser CreateUser()

Java设计模式学习记录-抽象工厂模式

前言 上篇博客介绍了简单工厂模式和工厂方法模式,这次介绍抽象工厂模式,抽象工厂模式和工厂方法模式的区别在于需要创建对象的复杂程度上. 抽象工厂模式 抽象工厂模式是围绕着一个超级工厂创建其他工厂.这个超级工厂被称为其他工厂的工厂,主要是为了解决接口选择问题. 举例说明: 还是继续上篇用户使用手的例子,现在生产手机的工厂发现,不同的手机使用的配件也不相同,需要单独的生产配件.例如iphonX使用的原深感摄像头,以及OLED显示屏,而iphone8使用的全新感光元件组成的摄像头,以及视网膜高清显示屏.

[大话设计模式]学习笔记——简单工厂模式

序 说好的每天进步一点点的,结果工作太忙,一直在加班,都没有学习新东西.我还要进BAT呢. 坚持每天学习新东西. 写代码时,意识到在代码结构上还是有点欠缺.赶紧补上. 纪录对设计模式的认识.小菜变大鸟.进攻BAT. 应用场景: 编写一个计算器控制台程序,要求输入两个数和运算符号,得到结果. 这本书使用C#写的.已有博主用JAVA写出来,参考:http://blog.csdn.net/ghsau/article/details/8163418 常见的做法: 写一个方法封装计算机的功能,我们只需传参

设计模式学习笔记--简单工厂模式

背景: 在开发过程中,经常会创建大量的对象,创建对象后还会涉及到一系列的初始化操作,而我们也不一定会只是在创建对象之后马上就使用对象,而且如果初始化操作很复杂,代码看起来就会非常杂乱,如果有变动,所有的初始化操作都要进行修改,相当难以维护. 功能: 将对象的创建和使用分离开来,专门用于创建对象并初始化.并且进行扩展后,可以根据参数不同,创建不同的对象. 例子: // 设计模式Demo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #includ

设计模式学习(二)-简单工厂模式

---恢复内容开始--- 简单工厂设计模式 简单工厂模式定义: 简单工厂设计模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂主要分为如下几个角色 抽象产品(abstract product):为所有具体产品的抽象表现,一般为抽象类 具体产品(product):为抽象产品的具体实现 生成产品工厂(facto

设计模式C++实现——抽象工厂模式

模式定义: 抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类. 抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要知道实际产出的具体产品时什么.这样一来,客户就从具体的产品中被解耦了. 模式结构: 举例: 数据库访问程序设计,不同的数据库访问方式可能不一样,为了抽象对对不同数据库的访问,可以将数据库隐藏起来,提供统一的访问方式,用多态进行实现. UML设计: 编程实现及执行结果: #include <iostream> using namespace st