不得不懂的C#设计模式学习(三)-抽象工厂模式

直接进入Subject.

抽象工厂模式(Abstract Factory)

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

四个角色

   抽象工厂(Abstract Factory)角色:这是工厂方法模式的核心,它与应用系统商业逻辑无关。

   具体工厂(Concrete Factory)角色:直接在客户端的调用下创建具体的实例。包含了选择合适的具体对象,而这个逻辑与应用系统的商业逻辑紧密相关。

   抽象产品(Abstract Product)角色:工厂方法模式所创建的对象的父类,或它们直接拥有的接口。

   具体产品(Concrete Product)角色:代表具体的产品。

例子

   留一个问题,看完例子给出UML图(可以贴出)。

 public class User    //增加User用户类

    {

        public int _id;

        public int Id

        {

            get { return _id; }

            set { _id = value; }

        }



        public string _name;

        public string Name

        {

            get { return _name; }

            set { _name = value; }

        }

    }



    public class Department //增加部门Department类

    {

        private int _id;

        public int Id

        {

            get { return _id; }

            set { _id = value; }

        }



        private string _deptNmae;

        public string DeptName

        {

            get { return _deptNmae; }

            set { _deptNmae = value; }

        }



    }



    interface IUser

    {

        void Insert(User user);

        User GetUser(int id);

    }



    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;

        }

    }



    class AccessUser : IUser

    {

        public void Insert(User user)

        {

            Console.WriteLine("在Access中给User表增加了一条记录");

        }



        public User GetUser(int id)

        {

            Console.WriteLine("在Access中根据id得到User表的一条记录");

            return null;

        }

    }



    interface IDepartment

    {

        void Insert(Department department);

        Department GetDepartment(int id);

    }



    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;

        }

    }



    class AccessDepartment : IDepartment

    {

        public void Insert(Department department)

        {

            Console.WriteLine("在Accessz中给Department表增加了一条记录");

        }



        public Department GetDepartment(int id)

        {

            Console.WriteLine("在Access中根据id得到了Department表的一条记录");

            return null;

        }

    }



    interface IFactory

    {

        IUser CreateUser();

        IDepartment CreateDepartment();

    }



    class SqlServerFactory : IFactory 

    {

        public IUser CreateUser()

        {

            return new SqlserverUser();

        }



        public IDepartment CreateDepartment()

        {

            return new SqlserverDepartment();

        }

    }



    class AccessFactory : IFactory

    {

        public IUser CreateUser()

        {

            return new AccessUser();

        }



        public IDepartment CreateDepartment()

        {

            return new AccessDepartment();

        }

    }
static void Main(string[] args)

        {

            User user = new User();

            Department dpt = new Department();



            IFactory facatory = new AccessFactory();

            IUser iu = facatory.CreateUser();

            iu.Insert(user);

            iu.GetUser(1);



            IDepartment id = facatory.CreateDepartment();

            id.Insert(dpt);

            id.GetDepartment(1);



            Console.ReadKey();

        }

总结

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,运用抽象工厂模式的关键点在于应对"多系列对象创建"的需求变化,学会了抽象工厂模式,你将理解OOP的精华:面向接口对象。

    

你可能感兴趣的:(抽象工厂模式)