• CSharp: null object pattern in donet core 3


        /// <summary>
        /// 空对象模式  null object pattern
        /// geovin,Geovin Du eidt 
        /// </summary>
        interface IVehicle
        {
            void Travel();
        }
        /// <summary>
        /// Bus class
        /// </summary>
        class Bus : IVehicle
        {
    
            /// <summary>
            /// 
            /// </summary>
            public static int busCount = 0;
            /// <summary>
            /// 
            /// </summary>
            public Bus()
            {
                busCount++;
            }
            /// <summary>
            /// 
            /// </summary>
            public void Travel()
            {
                Console.WriteLine("让我们乘公共汽车旅行吧.");
            }
        }
        /// <summary>
        /// Train class
        /// </summary>
        class Train : IVehicle
        {
    
            /// <summary>
            /// 
            /// </summary>
            public static int trainCount = 0;
            /// <summary>
            /// 
            /// </summary>
            public Train()
            {
                trainCount++;
            }
            /// <summary>
            /// 
            /// </summary>
            public void Travel()
            {
                Console.WriteLine("让我们乘坐火车旅行吧.");
            }
        }
        /// <summary>
        /// NullVehicle class
        /// </summary>
        class NullVehicle : IVehicle
        {
    
            /// <summary>
            /// 
            /// </summary>
            private static readonly NullVehicle instance = new NullVehicle();
            /// <summary>
            /// 
            /// </summary>
            private NullVehicle()
            {
                nullVehicleCount++;
            }
            /// <summary>
            /// 
            /// </summary>
            public static int nullVehicleCount;
            /// <summary>
            /// 
            /// </summary>
            public static NullVehicle Instance
            {
                get
                {
                    return instance;
                }
            }
            /// <summary>
            /// 
            /// </summary>
            public void Travel()
            {
                //Do Nothing
            }
        }
    

      

    调用:

     // 2//空对象模式
                    Console.WriteLine("***空对象模式 2 Null Object Pattern .***\n");
                    string duinput = String.Empty;
                    int dutotalObjects = 0;
    
                    while (duinput != "exit")
                    {
                        Console.WriteLine("输入您的选择(输入“a”代表公共汽车,输入“b”代表火车。输入“exit”退出应用程序 ");
                        duinput = Console.ReadLine();
                       GeovinDu.IVehicle duvehicle = null;
                        switch (duinput)
                        {
                            case "a":
                                duvehicle = new GeovinDu.Bus();
                                break;
                            case "b":
                                duvehicle = new GeovinDu.Train();
                                break;
                            case "exit":
                                Console.WriteLine("关闭应用程序.");
                                duvehicle = NullVehicle.Instance;
                                break;
                            default:
                                Console.WriteLine("请提供正确的输入(a/b/exit .)");
                                duvehicle = NullVehicle.Instance;
                                break;
                        }
                        dutotalObjects = GeovinDu.Bus.busCount + GeovinDu.Train.trainCount + NullVehicle.nullVehicleCount;
                        //No need to do null check now.
                        //if (vehicle != null)
                        duvehicle.Travel();
                        //}
                        Console.WriteLine("系统中创建的对象总数 ={0}",
                        dutotalObjects);
    
                    }
    
                    Console.ReadKey();
    

      

    输出:

    ***空对象模式 2 Null Object Pattern .***
    
    输入您的选择(输入“a”代表公共汽车,输入“b”代表火车。输入“exit”退出应用程序
    a
    让我们乘公共汽车旅行吧.
    系统中创建的对象总数 =2
    输入您的选择(输入“a”代表公共汽车,输入“b”代表火车。输入“exit”退出应用程序
    b
    让我们乘坐火车旅行吧.
    系统中创建的对象总数 =3
    输入您的选择(输入“a”代表公共汽车,输入“b”代表火车。输入“exit”退出应用程序
    c
    请提供正确的输入(a/b/exit .)
    系统中创建的对象总数 =3
    输入您的选择(输入“a”代表公共汽车,输入“b”代表火车。输入“exit”退出应用程序
    a
    让我们乘公共汽车旅行吧.
    系统中创建的对象总数 =4
    输入您的选择(输入“a”代表公共汽车,输入“b”代表火车。输入“exit”退出应用程序
    a
    让我们乘公共汽车旅行吧.
    系统中创建的对象总数 =5
    输入您的选择(输入“a”代表公共汽车,输入“b”代表火车。输入“exit”退出应用程序
    b
    让我们乘坐火车旅行吧.
    系统中创建的对象总数 =6
    输入您的选择(输入“a”代表公共汽车,输入“b”代表火车。输入“exit”退出应用程序
    

      

  • 相关阅读:
    左边定宽, 右边自适应方案
    C3 Transitions, Transforms 以及 Animation总结
    ES6中的Rest参数和默认参数
    Vue项目搭建流程 以及 目录结构构建
    在vue组件的stylus样式总 取消search类型的input按钮中默认样式
    JS与JQ绑定事件的几种方式.
    `<img>`放到`<div>`中底部出现空隙 以及解放方案.
    总结
    一道简单的编程题_ 关于定时器.
    mybatis-resultType和resultMap
  • 原文地址:https://www.cnblogs.com/geovindu/p/16790066.html
Copyright © 2020-2023  润新知