单词:Creator [kri?et?] 创造者,创作者; Product [?prɑd?kt] 产品; 结果; 乘积; 作品; factory [?f?kt?ri] 工厂,制造厂; <古>代理店;
简单工厂方法设计模式的设计图纸
Creator 是一个工厂类, 根据“四人帮”的软件设计模式的记号,图中的右半部分的类叫做产品类,由接口 Product 与 具体的实现类产品类ConcreteProduct 组成。
产品类实际上代表被创建的类结构,而Creator 类 是简单工厂的核心部分。Creator 类 拥有一个方法 ,factory() 及工厂方法,该方法负责创建产品类的对象。简单工厂方法模式 的特点是仅仅一个具体的创建者类,并且在此类中包含一个静态的工厂方法 factory()。
简单工厂方法模式包含的各组成部分的意义如下:
1.Creator:是简单工厂方法模式的核心,包含应用程序所需的业务逻辑,当客户类 Client 需要的时候,委托工厂类创建产品的实例。
2.Product:可以是 C# 接口,或者C# 抽象类, 是具体的子类 的超类,或者共同接口。
3.ConcreteProduct:实现 Product 接口,或者继承抽象类 Product。
例子:汽车保险管理程序实例的最后解决方案及为简单工厂方法模式, 其设计图给出,下面给出相应的代码。
namespace SimpleFactory { class Program { static void Main(string[] args) { //根据不同的场景实例出不同的类 IAutoInsurance ai = PolicyProducer.getPolicyObj("bodyInjure"); string desc = ai.getInsurInfo(); } } /// <summary> /// 工厂类 /// </summary> public class PolicyProducer { public static IAutoInsurance getPolicyObj(string option) { IAutoInsurance policy = null; switch (option) { case "bodyInjure": policy = new BodyInjur(); break; case "collision": policy = new Collision(); break; } return policy; } } /// <summary> /// 抽象产品 /// </summary> public interface IAutoInsurance { public string getInsurInfo(); } /// <summary> /// 产品类1 /// </summary> public class BodyInjur : IAutoInsurance { private string description; public string getInsurInfo() { return "bodyInjure"; } } /// <summary> /// 产品类2 /// </summary> public class Collision : IAutoInsurance { public static string getInsurInfo() { return "collision"; } } }
简单工厂方法模式的有点如下:
1.工厂方法包含从一个类的结构中选择初始类的业务逻辑。
2.客户类不直接创建产品的对象,客户类只作为对象的消费者。
3.简单工厂方法模式实现了责任分离。
4.客户类不负有创建类的对象责任,因此如果有新产品子类加入,不必修改已有的客户类代码(前提是客户类暂时不需要使用新的产品子类对象。)
5.因为工厂类中包含了对象生成的必要逻辑判断,根据客户端的选择条件对台实例化相关的类,所以客户端类中没有创建对象所需要的条件语句。
简单工厂方法模式的缺点如下:
1.由于工厂类必须知道怎么创建每个子类的对象,所以每当增加产品的类时候,都需要修改工厂方法,简单工厂方法模式不符合开闭原则。
2.因为工厂类的工厂方法是讲台的,所以工厂类中的方法不能被继承,简单工厂类只能是有一个单独的类,而不能成为一个层次的类。