设计模式之抽象工厂(三)

提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

    //用户信息
    public interface IUser
    {
        void InsertUser();
        void GetUserInfo();
    }
    //用户信息MySql
    public class User_MySql : IUser
    {
        public void GetUserInfo()
        {
            System.Diagnostics.Debug.WriteLine("MySql查询到一条用户信息");
        }

        public void InsertUser()
        {
            System.Diagnostics.Debug.WriteLine("MySql新增用户成功");
        }
    }
    //抽象工厂接口
    interface IDBFactory
    {
        IUser CreateUserService();
    }
    //MySql工厂实现类
    public class DBFactory_MySql : IDBFactory
    {
        public IUser CreateUserService()
        {
            return  new User_MySql();
        }
    }

    //测试
    IDBFactory fac = new DBFactory_MySql();
    IUser user = fac.CreateUserService();
    user.InsertUser();
    user.GetUserInfo();

如果因为某某原因想更换成SqlServer数据库只需要新增相应的代码就可以很轻松的切换

    //用户信息SqlServer
    public class User_SqlServer : IUser
    {
        public void GetUserInfo()
        {
            System.Diagnostics.Debug.WriteLine("SqlServer查询到一条用户信息");
        }
        public void InsertUser()
        {
            System.Diagnostics.Debug.WriteLine("SqlServer新增用户成功");
        }
    }
    public class DBFactory_SqlServer : IDBFactory
    {
        public IUser CreateUserService()
        {
            return new User_SqlServer();
        }
    }

    //调用方式修改一下
    IDBFactory fac = new DBFactory_SqlServer();
    IUser user = fac.CreateUserService();
    user.InsertUser();
    user.GetUserInfo();

在原有代码中只需要修改抽象工厂的实例对象就可以了IDBFactory fac = new DBFactory_SqlServer();如果项目中很多地方都创建了这样一个对象。 那改动起来也是很麻烦的事情。 如果结合IOC来使用的话就非常方面了。只需要修改注入方式就可以了。

    public class DesignModelController : Controller
    {
        IDBFactory fac;
        public DesignModelController(IDBFactory _fac)
        {
            this.fac = _fac;
        }

        public ActionResult Index()
        {
            fac.CreateUserService().InsertUser();
            return View();
        }
    }
发布了65 篇原创文章 · 获赞 28 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_26900081/article/details/88574027