首页 > 其他 > 详细

设计模式之-抽象工厂

时间:2021-09-04 02:55:00      阅读:10      评论:0      收藏:0      [点我收藏+]

工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性。但是在实际的应用中,一个工厂不止会创建单一的产品,而是一系列的产品,这就引入了抽象工厂的概念。解决涉及多个产品系列的问题。

大家都知道利用抽象工厂模式可以切换数据库的访问,那具体怎么做呢?
这里介绍两种方式:利用简单工厂改进传统的抽象工厂;利用反射的方式

一、通过简单工厂改进的抽象工厂

技术分享图片

 

 

 

 

 

有2张表

技术分享图片
  create table User
  (
   ID int primary key,
   Name nvarchar(50)   
  )
  create table Department
  (
   ID int primary key,
   DeptName nvarchar(50)   
  )
View Code

在model层建立2个类

技术分享图片
    class Department
    {
        public int ID { get; set; }
        public string DeptName { get; set; }
    }
    class User
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
    
View Code

建立2个接口类库

技术分享图片
    interface IUser
    {
        void Insert(User user);
        User GetUser(int id);
    }
    interface IDepartment
    {
        void Insert(Department department);
        Department GetDepartment(int id);
    }
View Code

然后针对不同的实现建立具体的类

技术分享图片
   class MysqlUser:IUser
    {
        public void Insert(User user)
        {

        }
        public User GetUser(int id)
        {
            return null;
        }
    }
    class SqlServerUser:IUser
    {
        public void Insert(User user)
        {
            //插入操作
        }
        public User GetUser(int id)
        {
            return null;
        }
    }
View Code
技术分享图片
    class MysqlDepartment:IDepartment
    {
        public void Insert(Department department)
        {
//插入操作
        }

        public Department GetDepartment(int id)
        {
        //对应数据库的代码
            return null;
        }
    }
    class SqlServerDepartment:IDepartment
    {
        public void Insert(Department department)
        {

        }

        public Department GetDepartment(int id)
        {
            return null;
        }
    }
View Code

然后通过一个简单工厂实例化不同的类

技术分享图片
class DataBaseAll
    {
        private static readonly string db = "Mysql";
        public static IUser CreateUser()
        {
            IUser result = null;
            switch(db)
            {
                case "Mysql":
                    result = new MysqlUser();
                    break;
                case "SqlServer":
                    result = new SqlServerUser();
                    break;
            }
            return result;
        }
        public static IDepartment CreateDepartment()
        {
            IDepartment result = null;
            switch (db)
            {
                case "Mysql":
                    result = new MysqlDepartment();
                    break;
                case "SqlServer":
                    result = new SqlServerDepartment();
                    break;
            }
            return result;
        }
    }
View Code

 

设计模式之-抽象工厂

原文:https://www.cnblogs.com/yxzstruggle/p/15221232.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!