图示原理 【注释】从图中可以看出,客户是与工厂打交道的,指示工厂生产某类产品,然后工厂生产出产品,客户统一以父类产品类对象的形式得到,从而使客户与具体产品的创建毫不相关。 各类解释 工厂类:担任这个角色的是工厂方法模式的核心。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。 抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。 具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,由具体类实现。 范例
namespace ConsoleApplicationDemo { public interface IApparel { string ShowMe(); } public class ApparelFactory { public IApparel CreateApparel(string apptype) { switch (apptype) { case "DRESSSHIRT": return new DressShirt(); case "SPORTSSHIRT": return new SportShirt(); } return null; } } public class DressShirt : IApparel { public string ShowMe() { return ("Dress Shirt"); } } public class SportShirt : IApparel { public string ShowMe() { return ("Sports Shirt"); } } class Program { static void Main(string[] args) { //生成工厂对象 ApparelFactory factory = new ApparelFactory(); //客户直接给工厂指示,生成想要的产品,以统一的父类产品形式提取 IApparel obj1 = factory.CreateApparel("DRESSSHIRT"); IApparel obj2 = factory.CreateApparel("SPORTSSHIRT"); string shirtType = obj1.ShowMe(); Console.WriteLine(shirtType); } } }效果图 简单工厂模式的优缺点 优点: 1.模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。 2.客户只需指示工厂创建哪个对象。 缺点: 1.由于工厂类集中了所有产品创建逻辑,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。 总之,就是关键部分的代码最好不轻易随需求产生变更,而简单工厂模式并没有做到这一点,所以抽象工厂模式(Abstract Factory Method Pattern)产生了-^^-。