zoukankan      html  css  js  c++  java
  • 不得不懂的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的精华:面向接口对象。

        

  • 相关阅读:
    The user specified as a definer ('root'@'%') does not exist
    Linux安装卸载查看vsftpd
    【数据分析】算法+Echarts小练
    【leecode】小练习(简单8题)
    路飞学城Python-Day171
    【路飞学城Day170】算法小结
    【路飞学城第七模块考核】
    【leecode】独特的电子邮件地址
    【leecode】宝石与石头
    路飞学城Python-Day153
  • 原文地址:https://www.cnblogs.com/mondLei/p/3013585.html
Copyright © 2011-2022 走看看