提取接口

概念:本文中的“提取接口” 是指超过一个的类要使用某一个类中部分方法时,我们应该解开它们之间的依赖,让调用者使用接口,这很容易实现也可以降低代码的耦合性。

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

namespace LosTechies.DaysOfRefactoring.ExtractInterface.Before
{
    public class ClassRegistration
    {
        public void Create()
        {
            // create registration code
        }

        public void Transfer()
        {
            // class transfer code
        }

        public decimal Total { get; private set; }
    }

    public class RegistrationProcessor
    {
        public decimal ProcessRegistration(ClassRegistration registration)
        {
            registration.Create();
            return registration.Total;
        }
    }
}

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

namespace LosTechies.DaysOfRefactoring.ExtractInterface.After
{
    public interface IClassRegistration
    {
        void Create();
        decimal Total { get; }
    }

    public class ClassRegistration : IClassRegistration
    {
        public void Create()
        {
            // create registration code
        }

        public void Transfer()
        {
            // class transfer code
        }

        public decimal Total { get; private set; }
    }

    public class RegistrationProcessor
    {
        public decimal ProcessRegistration(IClassRegistration registration)
        {
            registration.Create();
            return registration.Total;
        }
    }
}

总结:这个重构策略也是一个常见的运用,很多设计模式也会在其中运用此思想(如简单工程、抽象工厂等都会通过接口来解开依赖)。

版权声明:本文为博主http://www.zuiniusn.com原创文章,未经博主允许不得转载。

时间: 2025-01-13 12:30:05

提取接口的相关文章

重构第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

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

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

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

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

Python调用百度接口(情感倾向分析)和讯飞接口(语音识别、关键词提取)处理音频文件

本示例的过程是: 1. 音频转文本 2. 利用文本获取情感倾向分析结果 3. 利用文本获取关键词提取 首先是讯飞的语音识别模块.在这里可以找到非实时语音转写的相关文档以及 Python 示例.我略作了改动,让它可以对不同人说话作区分,并且作了一些封装. 语音识别功能 weblfasr_python3_demo.py 文件: 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 """ 4 讯飞非实时转写调用demo(语音识别)

初学python-获取网络设备配置文件接口IP信息

#!/usr/bin/python #coding=utf-8 import re,sys,csv from string import replace def Interfaceinfo(file_path,firms): with open(file_path,'r') as f: filecontext = f.readlines() if firms == 'a10': splitstring_keyword = '(^!)' firms_interface = '^interface

ETL应用:一种处理接口的Pro*C实现方法

2007年,当时项目所有ETL采用C编写,实现了ETL基本功能.当接口很多时,为保证文件获取效率,做好接口可配置:文件维护中经常会出现接口晚到情况,需要有一种方法能将接口晚到信息写入数据库,便于短信告警.当时刚学习Pro*C不久,就实现了该方法, 如下 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <time.h> #

[Effective JavaScript 笔记]第57条:使用结构类型设计灵活的接口

想象创建wiki的库.wiki网站包含用户可以交互式地创建.删除和修改的内容.许多wiki都以简单.基于文本标记语言创建内容为特色.通常,这些标记语言只提供了HTML可用功能的一个子集,但是却有一个更简单.更清晰的源格式.例如,环绕星号的文本被格式化为粗体,环绕下划线的被格式化为带有下划线的文本,环绕斜杠的被格式化为斜体.用记可以输入如下格式: this sentence contains a *bold phrase* within it. this sentence contains a _

界面与后台逻辑完全分离,单例模式,接口

界面与后台逻辑完全分离的方法可以防止我们绕过很多坑,避免很多错误,下面我自己总结下: 首先我们实现前台界面是这样的一个界面:实现点击添加的时候,把文本框的东西添加到list中,点击显示和添加后显示的是一样,点击新窗体的时候,实现form1 的数据.其实我们可以用一个中间的变量,传给新窗体,我们现在不用这种方法,我们用如下方法: 我们准备数据源,添加一个Testdata类,一开始的时候,我们不继承接口,只是单纯的一个Testdata类,这个数据是测试数据,插入代码: public class Te

腾讯云自然语言处理接口服务的经典应用场景(三)

下面列举NLP接口服务的四个典型使用场景. (1) 文本智能纠错 在智能客服的工作场景中,针对用户输入的语音信息,在语音转文本(ASR→TTS)的过程中,不可避免地会出现不少的上下文错位和措辞上的文本错误.面对这些错误,如果单纯使用人工来进行处理,会消耗大量的人力成本.这时,可以使用句法依存分析和文本纠错接口,对文本中各个语言单位之间的语义关联进行分析,同时实现对文本的自动纠错.该功能通过对文本的智能化纠错,可以高效辅助人工,有效提升语音转文字的文本质量. 除了在智能客服的用户输入检查场景中,在