zoukankan      html  css  js  c++  java
  • 方法级别的抽象

    //修改前
    public class Customer
    {
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public bool IsPriorityCustomer { get; set; }
        public decimal AnnualIncome { get; set; }
    }
    public class ProspectiveCustomer
    {
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public decimal AnnualIncome { get; set; }
    }
    
    
    public class ProspectiveCustomerValidator
    {
        public Customer CreateValidatedCustomer(
        ProspectiveCustomer prospectiveCustomer)
        {
            if (string.IsNullOrWhiteSpace(
            prospectiveCustomer.FirstName))
            {
                throw new ArgumentException("Invalid FirstName");
            }
            if (string.IsNullOrWhiteSpace(
            prospectiveCustomer.SecondName))
            {
                throw new ArgumentException("Invalid SecondName");
            }
            var newValidCustomer = new Customer
            {
                FirstName = prospectiveCustomer.FirstName,
                SecondName = prospectiveCustomer.SecondName
            };
            if (prospectiveCustomer.AnnualIncome > 100000)
            {
                newValidCustomer.IsPriorityCustomer = true;
            }
            return newValidCustomer;
        }
    }
    //修改后
    using System;
    
    public class Customer
    {
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public bool IsPriorityCustomer { get; set; }
        public decimal AnnualIncome { get; set; }
    }
    public class ProspectiveCustomer
    {
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public decimal AnnualIncome { get; set; }
    }
    public class ProspectiveCustomerValidator
    {
        // Higher abstraction level
        public Customer CreateValidatedCustomer(
        ProspectiveCustomer prospectiveCustomer)
        {
            EnsureValidDetails(prospectiveCustomer);
            var validatedCustomer =
            CreateNewCustomerFrom(prospectiveCustomer);
            SetCustomerPriority(validatedCustomer);
            return validatedCustomer;
        }
        // Medium abstraction level
        private static void EnsureValidDetails(
        ProspectiveCustomer prospectiveCustomer)
        {
            EnsureValidFirstName(prospectiveCustomer);
            EnsureValidSecondName(prospectiveCustomer);
        }
    
        private static Customer CreateNewCustomerFrom(
        ProspectiveCustomer prospectiveCustomer)
        {
            return new Customer
            {
                FirstName = prospectiveCustomer.FirstName,
                SecondName = prospectiveCustomer.SecondName,
                AnnualIncome = prospectiveCustomer.AnnualIncome
            };
        }
        // Low abstraction level
        private static void EnsureValidFirstName(
        ProspectiveCustomer prospectiveCustomer)
        {
            if (string.IsNullOrWhiteSpace(prospectiveCustomer.FirstName))
            {
                throw new ArgumentException("Invalid FirstName");
            }
        }
        private static void EnsureValidSecondName(
        ProspectiveCustomer prospectiveCustomer)
        {
            if (string.IsNullOrWhiteSpace(
            prospectiveCustomer.SecondName))
            {
                throw new ArgumentException("Invalid SecondName");
            }
        }
        private static void SetCustomerPriority(Customer customer)
        {
    
            if (customer.AnnualIncome > 100000)
            {
                customer.IsPriorityCustomer = true;
            }
        }
    }
  • 相关阅读:
    XML文件详解以及解析
    Delphi 泛型详解
    Delphi 修改本地日期和时间
    java -> this关键字
    java ->super关键字
    Java -> 构造器(构造方法)
    java -> 方法的重载
    java面向对象->多态
    Java面向对象->接口
    Java面向对象->抽象类
  • 原文地址:https://www.cnblogs.com/gaocong/p/6688608.html
Copyright © 2011-2022 走看看