C#设计模式-抽象工厂

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 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
相关文章
|
3月前
|
设计模式
设计模式之抽象工厂
设计模式之抽象工厂
|
3月前
|
设计模式 Java
常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)
有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法,观察者模式,策略模式)
49 2
|
3月前
|
设计模式
设计模式-抽象工厂
设计模式-抽象工厂
|
13天前
|
设计模式 算法 C#
C#设计模式之策略模式
C#设计模式之策略模式
63 19
|
13天前
|
设计模式 安全 程序员
C#设计模式之单例模式
C#设计模式之单例模式
28 3
|
1月前
|
设计模式 C++
C++一分钟之-设计模式:工厂模式与抽象工厂
【7月更文挑战第14天】设计模式是解决软件设计问题的通用方案。工厂模式与抽象工厂模式是创建型模式,用于对象创建而不暴露创建逻辑。工厂模式推迟实例化到子类,但过度使用会增加复杂性。抽象工厂则创建相关对象族,但过度抽象可能造成不必要的复杂度。两者均应按需使用,确保设计灵活性。代码示例展示了C++中如何实现这两种模式。
31 3
|
2月前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
|
10月前
|
设计模式 架构师
设计模式之抽象工厂
设计模式之抽象工厂
|
1月前
|
设计模式 存储 C#
|
1月前
|
设计模式 算法 C#
23种设计模式【C#代码举例】(上)
23种设计模式【C#代码举例】(上)