【创建型设计模式】-简单工厂方法设计模式

单词:Creator [kriˈetɚ] 创造者,创作者;  Product [ˈprɑdʌkt]  产品; 结果; 乘积; 作品; factory [ˈfæktəri] 工厂,制造厂; <古>代理店;

简单工厂方法设计模式的设计图纸

image

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.因为工厂类的工厂方法是讲台的,所以工厂类中的方法不能被继承,简单工厂类只能是有一个单独的类,而不能成为一个层次的类。

名称:多罗贝勒
博客地址:http://www.cnblogs.com/objctccc/
欢迎转载

原文地址:https://www.cnblogs.com/objctccc/p/5613227.html