• 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”退出应用程序
    

      

  • 相关阅读:
    【JavaScript】实现队列Queue
    【Leetcode刷题篇】1.两数之和(JS)
    【48个原生JS网页小demo】1.信息切换
    【JavaScript】原生实现call bind apply
    【JavaScript】Interview(精简版)
    【JavaScript】4种常见的内存泄露
    【JavaScript】原型和原型链
    论自作音乐播放器涉及知识点总结
    Android横竖屏切换继续播放视频
    Android上传头像代码,相机,相册,裁剪
  • 原文地址:https://www.cnblogs.com/geovindu/p/16790066.html
Copyright © 2020-2023  润新知