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的精华:面向接口对象。

        

  • 相关阅读:
    MyBatis逆向工程自动生成配置文件 spring boot工程
    使用Sencha打包报错Java heap space的解决办法
    Mybatis传递多个参数
    国内有哪些顶级技术团队的博客值得推荐?[转]
    tcp五元组
    linux环境代码不能发送UDP广播包
    SAP ABAP Development Tool 提高开发效率的十个小技巧
    如何在 SAP BTP 上通过 CDS view 快速创建 Fiori Elements 应用
    SAP Spartacus 的延迟加载 Lazy load 设计原理
    写给即将离开校园准备进入 SAP 研究院实习的朋友
  • 原文地址:https://www.cnblogs.com/mondLei/p/3013585.html
Copyright © 2011-2022 走看看