zoukankan      html  css  js  c++  java
  • 抽象类和开闭原则

      public class Vehicle
        {
            public void Stop() {
    
                Console.WriteLine("Stopped");
            }
            /// <summary>
            /// 这不符合开闭原则
            /// </summary>
            /// <param name="type"></param>
            public void Run(string type)
            {
                if(type == "car")
                {
                    Console.WriteLine("Car is running");
                }
                else if (type == "Truck")
                {
                    Console.WriteLine("Truck is running");
                }
            }
        }
    
        public class Truck:Vehicle {
    
            public void Run()
            {
                Console.WriteLine("Truck is running");
            }
        }
    
        public class Car:Vehicle
        {
            public void Run() {
                Console.WriteLine("Car is running");
            }
        }
     public class Vehicle
        {
            public void Stop() {
    
                Console.WriteLine("Stopped");
            }
          
            public virtual void Run()
            {
                Console.WriteLine("Vehicle is running"); 
            }
        }
    
        public class Truck:Vehicle {
    
            public override void Run()
            {
                Console.WriteLine("Truck is running");
            }
        }
    
        public class Car:Vehicle
        {
            public override void Run()
            {
                Console.WriteLine("Car is running");
            }
        }

    但是我们发现Vehicle这个类永远不会去调用run这个方法因为不符合逻辑也很模糊

     abstract public class Vehicle
        {
            public void Stop()
            {
    
                Console.WriteLine("Stopped");
            }
    
            public abstract void Run();
    
        }
    
        public class Truck : Vehicle
        {
    
            public override void Run()
            {
                Console.WriteLine("Truck is running");
            }
        }
    
        public class Car : Vehicle
        {
            public override void Run()
            {
                Console.WriteLine("Car is running");
            }
        }
    
        public class RaceCar : Vehicle
        {
            public override void Run()
            {
                Console.WriteLine("RaceCar is running");
            }
        }

    添加赛车类不会修改原本的类,之需要修改原本的类就可以了

  • 相关阅读:
    为什么new的普通数组用delete 和 delete[]都能正确释放
    虚幻4属性系统(反射)
    CFileDialog类的默认路径
    把单一元素的数组放在一个struct的尾端
    在UE4中使用SVN作为source control工具
    单精度浮点数和有效位数为什么是7位
    Valid Number--LeetCode
    归并排序
    堆排序
    直接选择排序
  • 原文地址:https://www.cnblogs.com/-alvin/p/10925452.html
Copyright © 2011-2022 走看看