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

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

  • 相关阅读:
    Java并发之线程管理(线程基础知识)
    spring aop使用
    java动态代理
    java深拷贝与浅拷贝
    装饰模式(也叫包装模式)
    Spring基于XML方式的使用
    javaWeb域对象
    静态代理和动态代理
    getAnnotation的一个坑
    (转)文件上传org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed
  • 原文地址:https://www.cnblogs.com/-alvin/p/10925452.html
Copyright © 2011-2022 走看看