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

  

posted @ 2022-10-13 23:02  ®Geovin Du Dream Park™  阅读(21)  评论(0编辑  收藏  举报