zoukankan      html  css  js  c++  java
  • 【创建型设计模式】-简单工厂方法设计模式

    单词: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/
    欢迎转载

  • 相关阅读:
    常见时间复杂度及对应关系
    【转载】Locust实现集合点
    curl 查看接口的网络分段响应时间
    python-字符串操作分类小结
    Jquery--1--选择器分类
    【转】linux shell编程实例总结
    随笔分类整理
    linux备忘录-日志档案
    linux备忘录-系统服务daemon
    linux备忘录-程序管理与SELinux
  • 原文地址:https://www.cnblogs.com/objctccc/p/5613227.html
Copyright © 2011-2022 走看看