工厂与抽象工厂

委托注入

 class Program
    {
        static void Main(string[] args)
        {

            Func<EmployeeFactory.EmployeeparaContent, Employee.EmployeeAddress> employeeAddressPr = (s) =>
            {
                return new Employee.EmployeeAddress()
                {
                    Address1 = s.EmployeeAdress.Split(',')[0],
                    Address2 = s.EmployeeAdress.Split(',')[1]


                };

            };

             var empolyea=  EmployeeFactory.CreateEmployee("wzj", "北京1,杭州2", employeeAddressPr);
             Console.Write(empolyea.Name + "\t" + empolyea.AddressCollers.Address1 + "|" + empolyea.AddressCollers.Address2);
             Console.ReadLine();
        }
    }


    //员工类
    public partial class Employee
    {

        //员工的地址类
        public class EmployeeAddress
        {
            public string Address1 { set; get; }

            public string Address2 { set; get; }
        }
        //名字
        public string Name{set;get;}
        //员工的地址信息
        public EmployeeAddress AddressCollers { set; get; }
    }

    //创建员工的简单工厂类  设计模式之创建形态
    public class EmployeeFactory
    {
       public class EmployeeparaContent
        {

            public string EmployeeAdress { set; get; }
        }

        //创建员工的方法  地址处理通过动态的委托来处理 可以随时变化处理方式*-

        public static Employee CreateEmployee(string name, string address, Func<EmployeeFactory.EmployeeparaContent, Employee.EmployeeAddress> adressFactory)
        {
            
            EmployeeparaContent parrcontent = new EmployeeparaContent();
            parrcontent.EmployeeAdress = address;
            //通过委托来代替工厂创建参数类型 更灵活 
            return new Employee() { Name = name, AddressCollers = adressFactory(parrcontent) };

        }


    }

  

工厂创建的优势:对象的创建依赖工厂的创建方法 还不是依赖于new  如果这个对象的创建需要修改 new 的地方都需要改  工厂模式的话只需要修改工厂代码就行

 

2.抽象工厂

用接口吧创建的对象的行为和成员变量给抽象出来

然后创建的的时候根据配置文件或者其他的  来创建继承该接口的对象  这样就符合依赖倒置的原则高层不依赖低层 应该依赖抽象

 

posted @ 2017-02-15 22:41  菜鸟飞飞飞  阅读(208)  评论(0编辑  收藏  举报