• 重构指南


    多态(polymorphism)是面向对象的重要特性,简单可理解为:一个接口,多种实现。

    当你的代码中存在通过不同的类型执行不同的操作,包含大量if else或者switch语句时,就可以考虑进行重构,将方法封装到类中,并通过多态进行调用。

    代码重构前:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using LosTechies.DaysOfRefactoring.SampleCode.BreakMethod.After;
    
    namespace LosTechies.DaysOfRefactoring.SampleCode.ReplaceWithPolymorphism.Before
    {
        public abstract class Customer
        {
        }
    
        public class Employee : Customer
        {
        }
    
        public class NonEmployee : Customer
        {
        }
    
        public class OrderProcessor
        {
            public decimal ProcessOrder(Customer customer, IEnumerable<Product> products)
            {
                // do some processing of order
                decimal orderTotal = products.Sum(p => p.Price);
    
                Type customerType = customer.GetType();
                if (customerType == typeof(Employee))
                {
                    orderTotal -= orderTotal * 0.15m;
                }
                else if (customerType == typeof(NonEmployee))
                {
                    orderTotal -= orderTotal * 0.05m;
                }
    
                return orderTotal;
            }
        }
    }

    代码重构后:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using LosTechies.DaysOfRefactoring.SampleCode.BreakMethod.After;
    
    namespace LosTechies.DaysOfRefactoring.SampleCode.ReplaceWithPolymorphism.After
    {
        public abstract class Customer
        {
            public abstract decimal DiscountPercentage { get; }
        }
    
        public class Employee : Customer
        {
            public override decimal DiscountPercentage
            {
                get { return 0.15m; }
            }
        }
    
        public class NonEmployee : Customer
        {
            public override decimal DiscountPercentage
            {
                get { return 0.05m; }
            }
        }
    
        public class OrderProcessor
        {
            public decimal ProcessOrder(Customer customer, IEnumerable<Product> products)
            {
                // do some processing of order
                decimal orderTotal = products.Sum(p => p.Price);
    
                orderTotal -= orderTotal * customer.DiscountPercentage;
    
                return orderTotal;
            }
        }
    }

    重构后的代码,将变化点封装在了子类中,代码的可读性和可扩展性大大提高。

  • 相关阅读:
    全能VIP音乐在线解析
    wordpress插件推荐
    day 34 IO模型
    day 33 协程、 socketserver模块
    day 32-2 练习
    day 32-2 并发编程——认识线程(下)
    day 32 练习
    day 32 并发编程——认识线程(上)
    day 31-1 练习
    day 31-1 守护进程、互斥锁、队列、生产消费模型
  • 原文地址:https://www.cnblogs.com/hmloo/p/6872337.html
Copyright © 2020-2023  润新知