码迷,mamicode.com
首页 > 其他好文 > 详细

抽象类和开闭原则

时间:2019-05-26 12:57:47      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:oid   running   run   veh   abs   override   code   逻辑   bsp   

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

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

 

抽象类和开闭原则

标签:oid   running   run   veh   abs   override   code   逻辑   bsp   

原文地址:https://www.cnblogs.com/-alvin/p/10925452.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!