重构第9天:提取接口(Extract Interface)

理解:提取接口的意思是,多于一个类共同使用某个类中的方法或属性,那么我们可以把这些方法和属性提出来,作为一个单独的接口。这样的好处是解除代码间的依赖,降低耦合性。

详解

先看重构前的代码:

 1  public class ClassRegistration
 2     {
 3         public void Create()
 4         {
 5             // create registration code
 6         }
 7
 8         public void Transfer()
 9         {
10             // class transfer code
11         }
12
13         public decimal Total { get; private set; }
14     }
15
16     public class RegistrationProcessor
17     {
18         public decimal ProcessRegistration(ClassRegistration registration)
19         {
20             registration.Create();
21             return registration.Total;
22         }
23     }

RegistrationProcessor 类只使用到了ClassRegistration 类中的Create方法和Total 字段,所以可以考虑把他们做成接口给RegistrationProcessor 调用。

重构后的代码:

 1  public interface IClassRegistration
 2     {
 3         void Create();
 4         decimal Total { get; }
 5     }
 6
 7     public class ClassRegistration : IClassRegistration
 8     {
 9         public void Create()
10         {
11             // create registration code
12         }
13
14         public void Transfer()
15         {
16             // class transfer code
17         }
18
19         public decimal Total { get; private set; }
20     }
21
22     public class RegistrationProcessor
23     {
24         public decimal ProcessRegistration(IClassRegistration registration)
25         {
26             registration.Create();
27             return registration.Total;
28         }
29     }

我们提取了一个IClassRegistration 接口,同时让ClassRegistration 继承此接口,然后调用端RegistrationProcessor就可以直接通过IClassRegistration 接口进行调用。

时间: 2024-08-07 16:59:11

重构第9天:提取接口(Extract Interface)的相关文章

重构第17天提取父类(Extract SuperClass)

今天的重构来自 Martin Fowler的http://refactoring.com/catalog/extractSuperclass.html. 理解:本文中的“提取父类”是指类中有一些字段或方法,你想把它们提取到父类中以便同一继承层次的其它类也可以访问他们,这个和之前的很多重构有异曲同工之处. 详解:看代码: 重构前代码: 1 public class Dog 2 { 3 public void EatFood() 4 { 5 // eat some food 6 } 7 8 9 pu

重构9-Extract Interface(提取接口)

我们来介绍一个常常被忽视的重构:提取接口.如果你发现多于一个类使用另外一个类的某些方法,引入接口解除这种依赖往往十分有用.该重构实现起来非常简单,并且能够享受到松耦合带来的好处. public class ClassRegistration{ public Double Total;//getter setterpublic void Create() { // create registration code } public void Transfer () { // class trans

小酌重构系列[8]——提取接口

前言 世间唯一"不变"的是"变化"本身,这句话同样适用于软件设计和开发.在软件系统中,模块(类.方法)应该依赖于抽象,而不应该依赖于实现. 当需求发生"变化"时,如果模块(类.方法)依赖于具体实现,具体实现也需要修改:如果模块(类.方法)依赖于接口,则无需修改现有实现,而是基于接口扩展新的实现. 面向实现?面向接口? 接口可以被复用,但接口的实现却不一定能被复用. 面向实现编程,意味着软件的模块(类.方法)之间的耦合性非常高,每次遭遇"

提取接口

概念:本文中的"提取接口" 是指超过一个的类要使用某一个类中部分方法时,我们应该解开它们之间的依赖,让调用者使用接口,这很容易实现也可以降低代码的耦合性. 正文:如下代码所示,RegistrationProcessor 类只使用到了ClassRegistration 类中的Create方法和Total 字段,所以可以考虑把他们做成接口给RegistrationProcessor调用. namespace LosTechies.DaysOfRefactoring.ExtractInter

组件接口(API)设计指南[2]-类接口(class interface)

*返回文件夹阅读其它章节: http://blog.csdn.net/cuibo1123/article/details/39894477 类接口(class interface) 你能够參考MGTileMenu的接口文件. 我们之前谈论了一些接口的细节,这里,例举几个通用规则: 规则1:使用当前平台的描写叙述用语或构架 一个最常见的API错误设计是使用外来的规则,API属于一个特定的平台和相关开发人员生态系统. 你不能使用不论什么其它不同平台的描写叙述用语或构架,这会污染你当前的代码库,并破坏

抽象类(abstract class)和接口(Interface)的区别

前言 抽象类(abstract class)和接口(Interface)是Java语言中对于抽象类定义进行支持的两种机制,赋予了Java强大的面向对象能力. 二者具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstractclass和Interface的选择显得比较随意.其实,两者之间还是有很大的区别的. 本文将对它们之间的区别进行剖析,并提供一个在二者之间进行选择的依据. 抽象类是什么? 本文中的抽象类表示的是一个抽象体,并非直接从abstract class翻译而

探索typescript的必经之路-----接口(interface)

TypeScript定义接口熟悉编程语言的同学都知道,接口(interface)的重要性不言而喻.?很多内容都会运用到接口.typescrip中的接口类似于java,同时还增加了更灵活的接口类型,包括属性.函数.可索引和类等,要想对typescript的操作进行更深入的了解,接口是必须接触到的.今天我就为大家分享一下,如何使用接口. 一. 为什么要使用接口1.1. JavaScript存在的问题我们在JavaScript中定义一个函数,用于获取一个用户的姓名和年龄的字符串:const getUs

特殊现象——接口(interface)

接口--java开发工作者经常挂在嘴边的名词,对于使用python的我来说,往往就代表着url,原因有两: 一是python没有接口概念,另则工作缘故,只接触过web接口测试,坐井观天之势未深入了解,原来接口除了是连接前后端的,还可以是数据传递过程中的类方法或者函数. Java 接口(interface) 接口使用 interface 关键字来声明,同现实生活常识一致,它规定了可以用来干什么,而不必了解它是怎么做到的,例如冰箱可以用来冷冻,不必了解它如何制冷. 主要特点:a.接口中只能定义抽象方

抽象类(abstract class)和 接口(interface)

PHP中的 抽象类(abstract class)和 接口(interface) 一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 .抽象类不能被直接实例化.抽象类中只定义(或部分实现)子类需要的方法.子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化. 3 .如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法.如果子类