当前位置 : 主页 > 编程语言 > c++ >

设计模式-工厂方法模式 。工厂方法模式 工厂方法模式是简单工厂模式的延伸,

来源:互联网 收集:自由互联 发布时间:2021-07-03
场景描述: 假设现在有一个User类(如下),原本设计程序使用SqlServer访问,现在因为客户需求的变化,需要使用Access来访问 public class User { private int id; private string name; public int ID { ge
场景描述: 假设现在有一个User类(如下),原本设计程序使用SqlServer访问,现在因为客户需求的变化,需要使用Access来访问
public class User
    {
        private int id;
        private string name;

        public int ID
        {   
            get { return id; }
            set { id = value; }
        }

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }
对于这种场景,单纯的去修改访问数据库代码,把SqlServer的访问类,修改成Access的访问类,不仅会出现很多问题,因为两种数据库查询语句本身就有区别,最重要的是扩展性非常差,万一以后需要改成用MySql来访问,又是一通改。所以这里用到了工厂方法模式。 首先定义一个User对象接口
//User对象接口类
    public interface IUser
    {
        //业务逻辑
        void Insert(User user);

        User GetUser(int i);
    }
然后是两种数据库实现的User对象,都继承于IUser接口
//Sql数据库User对象
    public class SqlUser : IUser
    {
        public void Insert(User user)
        {
            Console.WriteLine("InsertSqlUser");
        }

        public User GetUser(int i)
        {
            Console.WriteLine("SqlUserList");
            return null;
        }
    }


//Access数据库User对象
    public class AccessUser : IUser
    {
        public void Insert(User user)
        {
            Console.WriteLine("InsertAccessUser");
        }

        public User GetUser(int i)
        {
            Console.WriteLine("AccessUserList");
            return null;
        }
    }
定义一个工厂接口
//工厂接口
    interface IFactory
    {
        //继承类可以根据不同的需求产生不同的User对象
        IUser CreateUser();
    }
具体的工厂,根据不同的需求,产生不同的User对象
//Sql数据库工厂
    public class SqlFactory : IFactory
    {
        //访问Sql数据库的User对象
        public IUser CreateUser()
        {
            return new SqlUser();
        }
    }

//Access数据库工厂
    public class AccessFactory : IFactory
    {
        //访问Access数据库的User对象
        public IUser CreateUser()
        {
            return new AccessUser();
        }
    }
网友评论