重构——17引入本地扩展(Introduce Local Extension)

引入本地扩展(Introduce Local Extension)

你需要为服务类提供一些额外函数,但你无法修改这个类;建立一个新类,使它包含这些额外函数,让这个类扩展成为源类的子类或者包装类

一、动机

1、需要的额外函数超过俩,Introduce Foreign Method Hold不住了

2、包装类和子类怎么选择?

二、做法

1、建立一个扩展类,将它作为原始类的子类或者包装类

2、在扩展类中加入转型构造函数

3、在扩展类中加入新特性

4、根据需要,将源对象替换为扩展对象

5、将针对原始类定义的所有外加函数搬移到扩展类中

6、重新组织数据

时间: 2024-07-30 12:17:58

重构——17引入本地扩展(Introduce Local Extension)的相关文章

重构——41引入断言(Introduce Assertion)

引入断言(Introduce Assertion) 某一段代码需要对程序状态作出某种假设:以断言明确表现这种假设 一.动机 断言是一个条件表达式,应该总是为真.如果它失败了,表示程序员犯了错误.因此断言的失败应该导致一个非受控异常.断言绝对不能被系统的其它部分使用.实际上,程序最后成品往往将断言统统删除,因此,标记"某些东西是个断言"是很重要的 二.做法 1.如果你发现代码假设某个条件始终为真,就加入一个断言说明这种情况 2.简化函数调用

重构——16引入外加函数(Introduce Foreign Method)

引入外加函数(Introduce Foreign Method) 你需要为提供服务的类增加一个函数,但你无法修改这个类:在客户端建立一个函数,并以第一参数形式传入一个服务类实例 一.动机 1.服务类不能提供一项新服务,你又不能修改源码 2.如果需要大量的外加函数,就Introduce Local Extension 3.外加函数是权宜之计 二.做法 1.在客户端类建立一个函数,用来提供你需要的功能,这个函数不应该调用客户端类的任何特性.如果他需要一个值,把该值当做参数传给它 2.以服务类实例作为

Maven自定义上传第三方包到3rd party(第三方无依赖jar和本地扩展类加入maven统一管理)

Maven自定义上传第三方包到3rd party(第三方无依赖jar和本地扩展类加入maven统一管理) 注:如果图片太小,则可以下载查看,CSDN,不提供点击放大! 1:用浏览器登陆nexus服务器(此处为本地): http://localhost:8081/nexus/ admin admin123 2:第三方依赖加入: Log in到nexus中,如下图: 3:手动设置填写:GroupId,Artifact,Version: 4:点击:Select Artifact(s) for Uplo

jsp-为什么项目中引入本地的jquery库会报404路径错误

问题描述 为什么项目中引入本地的jquery库会报404路径错误 做项目时,jsp页面引入本地jquery库报路径404错误,为什么求指点? 解决方案 提醒一下,静态文件别放WEB-INF下面,找不到 解决方案二: 是找不到jsp页面还是jquery没加载? 解决方案三: 页面按 F12看调试工具的控制台有没有报错信息 检查一下jquery路径对不对 或者把jquery引入项目再导入 解决方案四: jquery路径不对,修改一下配置文件,修改一下页面文件中开头导入的JQUERY的路径 解决方案五

重构——5引入解释性变量(Introduce Explaining Variable)

引入解释性变量(Introduce Explaining Variable) 你有一个复杂的表达式,将该复杂表达式(或其中的一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途 一.动机 1.表达式有可能非常复杂难以阅读 2.条件逻辑中,可以运用临时变量来解释每一步运算的意义 二.做法 1.声明一个final临时变量,将待分解之复杂表达式中的一部分动作的运算结果赋值给它. 2.将表达式式中的"运算结果这一部分",替换为上述临时变量.如果被替换的这一部分在代码中重复出现,你可以每

重构——40引入Null对象(Introduce Null Object)

引入Null对象(Introduce Null Object) 你需要再三检查某对象是否为null:将null值替换为null对象 一.动机 1.多态最根本的好处在于:你不必在向对象询问"你是什么类型"而后根据得到的答案调用对象的某个行为--你只管调用就是了,其它的一切多态机制会为你安排妥当 2.null对象一定是常量,可以使用Singleton来实现它们 3.关于Null对象模式,你可以在Woolf[Woolf]中找到更详细的介绍 二.做法 1.为源类建立一个子类,使其行为就像是源类

重构——50引入参数对象(Introduce Parameter Object)

引入参数对象(Introduce Parameter Object) Range模式:某些参数总是很自然的同时出现:以一个对象取代这些参数 一.动机 1.碰到数据泥团,我们可以运用一个对象包装这些数据,那怕只是为了把这些数据组织在一起,这样做也是值得的 2.可以把这些参数的共同处理移到新对象中,减少重复代码 二.做法 1.新建一个类,用以表现你想替换的一组参数,将这个类设为不可变的 2.编译 3.针对使用改组参数的所有函数,实施Add Parameter,传入上述新建类的实例对象,并将此参数值设

JUnit 5系列之扩展模型(Extension Model)介绍

概述 环境搭建 基础入门 架构体系 扩展模型(Extension Model)  条件断言 注入 动态测试 ... (如果不喜欢看文章,你可以戳这里看我的演讲,或者看一下最近的 vJUG 讲座,或者我在 DevoxxPL 上的 PPT. 本系列文章都基于 Junit 5发布的先行版 Milestone 2.它可能会有变化.如果有新的里程碑(milestone)版本发布,或者试用版正式发行时,我会再来更新这篇文章. 这里要介绍的多数知识你都可以在 JUnit 5 用户指南 中找到(这个链接指向的是

Pogoplug推出新款云存储本地扩展设备

近日,Pogoplug公司发布了新一代云存储扩展设备,这个系列的扩展设备支持将本地存储加入Pogoplug云存储网络. 默认情况下,Pogoplug云服务支持免费的5GB空间,而这次推出的四系列扩展设备支持用户自扩展可用空间,用户只需将扩展设备通过千兆网口接入互联网.存储扩展方面支持如Seagate GoFlex 系列类似的桌面存储设备,或是通过USB接口连接的HDD/SSD,甚至SD卡. 接口方面,Pogoplug 四系列拥有一个USB2.0接口.两个USB3.0接口和一个2.5英寸SATA/