代码重构之提升方法

核心:如果多个继承类都会使用到同一个方法,则该方法就应该提升到基类里,而不是在子类中单独写。

    提高了代码的重用性(一个函数,多处使用), 如果需求有改,只需要修改一处即可,方便维护,代码结构也更加清晰。

代码演示:

1、方法提升前

  1-1、基类

代码重构之提升方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PullUpMethod
{
    public abstract class Phone
    {
        public void Call() {
            Console.WriteLine("打电话");
        }
    }
}
View Code

  1-2、子类一

代码重构之提升方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PullUpMethod
{
    public class IPhone:Phone
    {
        public void ShakeDeleteEditMsg() {
            Console.WriteLine("摇一摇删除编辑的内容~~");
        }
    }
}
View Code

  1-3、子类二

代码重构之提升方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PullUpMethod
{
    public class Galaxy:Phone
    {
        public void SendMsg()
        {
            Console.WriteLine("发送消息");
        }
    }
}
View Code

  1-4、客户端

代码重构之提升方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/// <summary>
/// 提升方法
/// </summary>
namespace PullUpMethod
{
    class Program
    {
        static void Main(string[] args)
        {

            //需求V1:苹果手机向外暴露摇一摇删除编辑内容 和 打电话接口,
            //     盖世手机向外暴露发送短信 和 打电话的接口
            Console.WriteLine("====================需求V1写法=================");
            Console.WriteLine("=============IPhone===============");
            IPhone iPhone = new IPhone();
            iPhone.Call(); //所有手机都有的
            iPhone.ShakeDeleteEditMsg(); //苹果特有的~ 
            Console.WriteLine("=============Galaxy===============");
            Galaxy galaxy = new Galaxy();
            galaxy.Call(); //所有手机都有的
            galaxy.SendMsg(); // 所有手机都有的

            Console.ReadKey();

        }
    }
}
View Code

2、方法提升后

  2-1、基类

代码重构之提升方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PullUpMethod
{
    public abstract class Phone
    {
        //所有手机都有打电话和发送消息的功能
        public void Call()
        {
            Console.WriteLine("打电话");
        }
        //将Galaxy中发送消息的函数提升到基类中来了,因为所有的手机都可以发送短信。而不是只有Galaxy才可以发送信息
        public void SendMsg()
        {
            Console.WriteLine("发送消息");
        }
    }
}
View Code

  2-2、子类一

代码重构之提升方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PullUpMethod
{
    public class IPhone:Phone
    {
        public void ShakeDeleteEditMsg() {
            Console.WriteLine("摇一摇删除编辑的内容~~");
        }
    }
}
View Code

  2-3、子类二

代码重构之提升方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PullUpMethod
{
    public class Galaxy:Phone
    {
    }
}
View Code

  2-4、客户端

代码重构之提升方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/// <summary>
/// 提升方法
/// </summary>
namespace PullUpMethod
{
    class Program
    {
        static void Main(string[] args)
        {

            //需求V1:苹果手机向外暴露摇一摇删除编辑内容 和 打电话接口,
            //     盖世手机向外暴露发送短信 和 打电话的接口
            Console.WriteLine("====================需求V1写法=================");
            Console.WriteLine("=============IPhone===============");
            IPhone iPhone = new IPhone();
            iPhone.Call(); //所有手机都有的
            iPhone.ShakeDeleteEditMsg(); //苹果特有的~ 
            Console.WriteLine("=============Galaxy===============");
            Galaxy galaxy = new Galaxy();
            galaxy.Call(); //所有手机都有的
            galaxy.SendMsg(); // 所有手机都有的

            //需求V2:在需求V1的基础上,苹果手机也要向外暴露发送短信的接口
            Console.WriteLine("====================需求V2写法=================");
            Console.WriteLine("=============IPhone===============");
            IPhone iPhoneV2 = new IPhone();
            iPhoneV2.Call();    //所有手机都有的
            iPhoneV2.SendMsg();  //发送信息
            iPhoneV2.ShakeDeleteEditMsg(); //苹果特有的~ 
            Console.WriteLine("=============Galaxy===============");
            Galaxy galaxyV2 = new Galaxy();
            galaxyV2.Call(); //所有手机都有的
            galaxyV2.SendMsg(); // 所有手机都有的

            Console.ReadKey();

        }
    }
}
View Code

结果展示:

代码重构之提升方法

 

 

 

 

 

写写博客,方便自己也方便有需要的人~~

上一篇:全能高性价比蓝牙耳机推荐,五款销量十万+的低延迟蓝牙耳机


下一篇:Android Camera API,HDR照片设置? (三星Galaxy)