重构第4天:降低方法(Push Down Method)
理解:降低方法,就是把基类中的某个方法,提出来放到继承类当中去。
详解: 上一节我们讲了方法的提公,是把多于一个继承类都要用到的方法,提出来放到基类中去,来提高代码的可维护性和重用性。那么这一节,我们所讲述的正好相反。就是把基类中不常用的方法,或者只有某个继承类会用到的方法,踢出去,搬移到需要他的类中去,来让结构更清晰,提高代码的可读性。
重构前代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace _31DaysRefactor
{
public abstract class Animal{ public void Bark()
{ //code to bark
}
} public class Dog : Animal
{ } public class Cat : Animal
{ }
}
比如 在基类中的方法Bark ,在继承类中,只有Dog类需要,因为只有狗才能叫狗吠。而Cat类根本不需要该方法。所以直接把Bark方法提到Dog类中去,让结构更清晰,更容易理解。
重构后的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace _31DaysRefactor
{
public abstract class Animal{ } public class Dog : Animal
{
public void Bark()
{ //code to bark
}
} public class Cat : Animal
{ }
}
当然,这些是简单的重构方法,什么时候该用什么时候不该用,都要视具体情况决定,也不能一味的乱用。
重构第4天:降低方法(Push Down Method)的更多相关文章
- 重构第6天:降低字段(Push Down Field)
理解:和提升字段正好相反,跟降低方法类似,就是把基类中,只有部分继承类需要用到的字段,降低到继承类自身去. 详解: 重构前代码: using System; using System.Collecti ...
- 《重构》的读书笔记–方法列表
第5章 重构列表 5.1 重构的记录格式103 5.2 寻找引用点105 5.3 这些重构手法有多成熟106 第6章 重新组织函数 6.1 (P110)Extract Method(提炼函数) 6.2 ...
- 020——VUE中变异方法push的留言版实例讲解
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Vue 变异方法Push的留言板实例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 设计模式的征途—3.工厂方法(Factory Method)模式
上一篇的简单工厂模式虽然简单,但是存在一个很严重的问题:当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背开闭原则.如何实现新增新产品而 ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- Day04 -玩弄Ruby的方法:instance method与class method
前情提要在第三天时,我们解说了如何在class里用include与extend,去使用module的method. Include is for adding methods to an instan ...
- 重构指南 - 为布尔方法命名(Rename boolean method)
如果一个方法中包含多个布尔类型的参数,一是方法不容易理解,二是调用时容易出错. 重构前代码 public class BankAccount { public void CreateAccount(C ...
- 小菜学习设计模式(三)—工厂方法(Factory Method)模式
前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...
随机推荐
- 十大免费教程资源帮助新手快速学习JavaScript
“JavaScript”的名头相信大家肯定是耳熟能详,但只有一小部分人群了解它的使用与应用程序构建方式.这“一小部分”人指的当然是技术过硬的有为青年.网络程序员以及IT专业人员.但对于一位新手或者说外 ...
- 计算空间直线与平面的交点 (C#)
public class NGlbVec3d {// 三维点 public double x, y, z; public NGlbVec3d() { ...
- 在GridView中使用radioButoon
在GridView中使用radioButoon 方法一: <input type="radio" id='radioSelectFeed' name="radioD ...
- 【Cocos2d-Js基础教学(3)各种基类的定义和使用】
在游戏开发过程中我们会遇到很多继承关系的处理,特别是层级之间的关系处理. 可能有的同学也做过类似的处理,比如: 游戏的显示层分级为: 底层Scene ,界面层Layer,页面层Page,弹框层Tip等 ...
- Web GIS 离线地图
Web GIS 离线地图 1,基于瓦片的离线地图下载 博客园 阿凡卢 提供了离线地图的下载工具,下载地址:http://pan.baidu.com/s/1hqvQr7e 具体使用见 参考资料2 阿凡卢 ...
- “远程调试监视器(MSVSMON.EXE)似乎没有在远程计算机上运行“的完美解决方案
今天调试程序时,Visual Studio突然报出了如下错误: Microsoft Visual Studio 远程调试监视器(MSVSMON.EXE)似乎没有在远程计算机上运行.这可能是因为防火墙阻 ...
- ecshop的订单状态
ecshop的订单状态都是在ecs_order_info表中的字段里. 订单状态 未确认 取消 确认 已付款 配货中 已发货 已收货 退货 order_status 0 2 1 1 1 5 5 4 s ...
- WebApp MVC,“不一样”的轻量级互联网应用程序开发框架
WebApp MVC 这是一个专门开发互联网程序的开发框架,跟之前的<EFW框架>使用情况不一样,EFW主要用于开发行业软件的快速开发:而WebApp又区别与别的MVC框架,比如AspNe ...
- AppStore新应用上传指南
目录 [隐藏] 1 提交新应用前的准备工作 2 进入itunesconnect 3 提交新应用的信息 4 上传应用 5 用Application Loader上传应用 6 上传时出错的解决方案 6. ...
- 如何生成ipa文件
xcode--Product--Archive 弹出Organizer-Archives选择Distribute---Save for EnterPrise or Ad_Hoc Deployment- ...