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");
            }
        }

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

  • 相关阅读:
    实用脚本 2 Linux下定时执行脚本
    SSH原理与运用(一):远程登录
    SSH原理与运用(二):远程操作与端口转发
    注册页面
    注册页面2
    CSS實現網頁漸變背景
    SQL Server Log文件“減肥”方法
    发布一个jquery插件在Web下输入密码时提示大写锁定键
    新增流水号
    ftp图片上传
  • 原文地址:https://www.cnblogs.com/-alvin/p/10925452.html
Copyright © 2011-2022 走看看