zoukankan      html  css  js  c++  java
  • 与继承相关的一些重构(二)

    5.提取主类:提取一个基类,抽象出共有方法,比较常用的重构,这里的基类也许并不存在,需要自己新建立。

     用法场景:当有一个类中的某个方法需要经常被其他的类调用的时候,说明这个方法重用率很高,可以考虑把它抽象出来,放到一个基类中。

    //重构前
    publicclass Dog
    {
      
    publicvoid EatFood()
      {
        
    // eat some food
      }

      
    publicvoid Groom()
      {
        
    // perform grooming
      }
    }
    //重构后
    publicclass Animal
    {
      
    publicvoid EatFood()
      {
        
    // eat some food
      }

      
    publicvoid Groom()
      {
        
    // perform grooming
      }
    }
    publicclass Dog : Animal
    {
    }

    6.提取子类:将基类中的方法放到子类中,这里的子类也许并不存在,需要自己新建立。

     用法场景:当基类中的某些方法并不是面向所有或者大多数类的时候,需要把这些方法下放到子类中。

    //重构前
    publicclass Registration
    {
      
    public NonRegistrationAction Action { get; set; }
      
    publicdecimal RegistrationTotal { get; set; }
      
    publicstring Notes { get; set; }
      
    publicstring Description { get; set; }
      
    public DateTime RegistrationDate { get; set; }
    }
    //重构后
    publicclass Registration
    {
      
    publicdecimal RegistrationTotal { get; set; }
      
    publicstring Description { get; set; }
      
    public DateTime RegistrationDate { get; set; }
    }

    publicclass NonRegistration : Registration
    {
      
    public NonRegistrationAction Action { get; set; }
      
    publicstring Notes { get; set; }
    }

    7.合并继承:把子类合并到基类中去。

     用法场景:当子类只有属性定义,并且这些属性可以放置在基类中,那这个子类就是多余的,在把属性和基类合并后就可以移除了。

    //重构前
    publicclass Website
    {
      
    publicstring Title { get; set; }
      
    publicstring Description { get; set; }
      
    public IEnumerable<Webpage> Pages { get; set; }
    }
    publicclass StudentWebsite : Website
    {
      
    publicbool IsActive { get; set; }
    }
    //重构后
    publicclass Website
    {
      
    publicstring Title { get; set; }
      
    publicstring Description { get; set; }
      
    public IEnumerable<Webpage> Pages { get; set; }
      
    publicbool IsActive { get; set; }
    }

      继承相关的重构就这几点,尝试在项目中多用用,很快就有感觉了:)

  • 相关阅读:
    联合索引和多个单列索引选择
    CentOS6.5 一台服务器同时安装多个Mysql数据库
    一次CentOS的服务器被攻击教训
    java版本的memcache静态化
    mysql存储空间满的处理方式
    MariaDB 10.0 和 MariaDB 10.1 存储过程中 PREPARE FROM EXECUTE 区别
    CentOS6.x 优化脚本
    Mysql 使用 “LOAD DATA INFILE”需要注意的问题
    Mysql 日期类型比较 TIMESTAMPDIFF
    CentOS6.x 源码安装Nginx
  • 原文地址:https://www.cnblogs.com/ywsoftware/p/2892648.html
Copyright © 2011-2022 走看看