工厂与抽象工厂
委托注入
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.抽象工厂
用接口吧创建的对象的行为和成员变量给抽象出来
然后创建的的时候根据配置文件或者其他的 来创建继承该接口的对象 这样就符合依赖倒置的原则高层不依赖低层 应该依赖抽象

浙公网安备 33010602011771号