C#设计模式-抽象工厂

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: C#设计模式-抽象工厂

抽象工厂模式的学习体会到了类与类之间的解耦重要性,并且类与类之间的联系也因为解耦看着更加的简洁易懂,首先先了解到抽象工厂的定义是什么:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式,是工厂方法模式的升级版,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。


对于应用我也只是简单的看着那些例子来的,但是就是这些例子特别的简洁,易懂所以就用所学的这个对于数据库访问与修改的小例子来进行一个小展示,如有不足之处还请告知,感谢各位。


第一步:创建三个接口用于客户端的访问,解除与具体的类之间的耦合  

//定义一个创建访问Department表对象的抽象的工厂接口
    interface IFactory
    {
        IUser CreteUser();
        IDepartment CreateDepartment();
    }
    interface IUser
    {
        void Insert(User user);
        User GetUser(int id);
    }
 //用于客户端访问,解除与具体数据库访问的耦合
    interface IDepartment
    {
        void Insert(Department department);
        Department GetDepartment(int id);
    }

第二步: 创建对应的类来实现这个三个接口


//实现IFactory接口,实例化AccessUser和AccessDepartment
    class AccessFactory:IFactory
    {
        public IUser CreteUser()
        {
            return new AccessUser();
        }
        public IDepartment CreateDepartment()
        {
            return new AccessDepartment();
        }
    }
class AccessUser:IUser
    {
        public void Insert(User user)
        {
            Console.WriteLine("在Access中给User表增加一条记录");
        }
        public User GetUser(int id)
        {
            Console.WriteLine("在Access中根据ID得到User表中的一条记录");
            return null;
        }
    }
//实现IFactory接口,实例化SqlserverUser和SqlserverDepartment
    class SqlServerFactory:IFactory
    {
        public IUser CreteUser()
        {
            return new SqlServerUser();
        }
        public IDepartment CreateDepartment()
        {
            return new SqlserverDepartment();
        }
    }
 class SqlServerUser:IUser
    {
        public void Insert(User user)
        {
            Console.WriteLine("在SQL Server中给User表增加一条记录");
        }
        public User GetUser(int id)
        {
            Console.WriteLine("在SQL Server中根据ID得到User表的一条记录");
            return null;
        }
    }

其余类代码


//用于访问SQLsever的Department
    class SqlserverDepartment:IDepartment
    {
        public void Insert(Department department)
        {
            Console.WriteLine("在SQL Server中给Department表增加一条记录");
        }
        public Department GetDepartment(int id)
        {
            Console.WriteLine("在SQL Server中根据ID得到Department表一条记录");
            return null;
        }
    }
  //用于访问Access的Dempartment
    class AccessDepartment:IDepartment
    {
        public void Insert(Department department)
        {
            Console.WriteLine("在Access中给Department表增加一条记录");
        }
        public Department GetDepartment(int _id)
        {
            Console.WriteLine("在Access中根据ID得到Department表的一条记录");
            return null;
        }
    }
class User
    {
        private int _id;
        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
    }
Department与User类相似

客户端代码


 class Program
    {
        static void Main(string[] args)
        {
            User user = new User();
            Department dept = new Department();
            IFactory factory = new AccessFactory();
            //IFactory factory = new SqlServerFactory();
            IUser iu = factory.CreteUser();
            iu.Insert(user);
            iu.GetUser(1);
            IDepartment id = factory.CreateDepartment();
            id.Insert(dept);
            id.GetDepartment(1);
            Console.Read();
        }
    }

因为通过这三个接口的作用,我们客户端也不需要去了解到具体是哪个数据库的就可以直接进行访问,这也就是抽象工厂的最主要的能力,只需要提供一个创建好的接口就不需要指定具体的类就可以了,其实你会发现在我们学习的那些模式当中都在围绕着解耦、封装、易维护这些需求来的,而且越往后这些模式的功能就更加的人性化,在生活中这些模式其实也是随处可见的,把这些带进生活更加的容易理解,自己现在理解的也就这点了,如有不足之处还请指出。


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
7月前
|
设计模式
设计模式之抽象工厂
设计模式之抽象工厂
|
7月前
|
设计模式 Java
常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)
有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法,观察者模式,策略模式)
69 2
|
7月前
|
设计模式
设计模式-抽象工厂
设计模式-抽象工厂
|
2月前
|
设计模式 安全 Java
C# 一分钟浅谈:设计模式之单例模式
【10月更文挑战第9天】单例模式是软件开发中最常用的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。本文介绍了单例模式的基本概念、实现方式(包括饿汉式、懒汉式和使用 `Lazy<T>` 的方法)、常见问题(如多线程和序列化问题)及其解决方案,并通过代码示例详细说明了这些内容。希望本文能帮助你在实际开发中更好地应用单例模式,提高代码质量和可维护性。
47 1
|
3月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
3月前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程
|
4月前
|
设计模式 算法 C#
C#设计模式之策略模式
C#设计模式之策略模式
87 19
|
4月前
|
设计模式 安全 程序员
C#设计模式之单例模式
C#设计模式之单例模式
52 3
|
5月前
|
设计模式 C++
C++一分钟之-设计模式:工厂模式与抽象工厂
【7月更文挑战第14天】设计模式是解决软件设计问题的通用方案。工厂模式与抽象工厂模式是创建型模式,用于对象创建而不暴露创建逻辑。工厂模式推迟实例化到子类,但过度使用会增加复杂性。抽象工厂则创建相关对象族,但过度抽象可能造成不必要的复杂度。两者均应按需使用,确保设计灵活性。代码示例展示了C++中如何实现这两种模式。
47 3
|
6月前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)