重构——67以委托取代继承(Replace Inheritance with Delegation)

简介: 以委托取代继承(Replace Inheritance with Delegation) 1、某个子类只使用了超类接口中的一部分,或是根本不需要继承而来的数据 2、在子类中新建一个字段用以保存超类;调整子类函数,令它改而委托超类;然后去掉两者之间的继承关系

以委托取代继承(Replace Inheritance with Delegation)

1、某个子类只使用了超类接口中的一部分,或是根本不需要继承而来的数据

2、在子类中新建一个字段用以保存超类;调整子类函数,令它改而委托超类;然后去掉两者之间的继承关系

一、动机

超类中的许多操作并不真正适用于子类

二、操作

1、在子类中新建一个字段,使其引用超类的一个实例,并将它初始化为this

2、修改子类内的所有函数,让它们不再使用超类,转而使用上述那个受托字段。每次修改后,编译并测试

3、去除两个类之间的继承关系,新建一个受托类对象赋给受托字段

4、针对客户端所用的每一个超类函数,为它添加一个简单的委托函数

5、编译,测试

目录
相关文章
关于标签管理系统
原文地址:关于标签管理系统作者: songguiliang 一、标签管理系统体系 标签管理系统包括标签管理和贴标签两大功能模块,6个子模块。接下来我们将对每个功能模块的构建,进行详细说明。
8646 0
|
7月前
|
设计模式 XML JSON
【设计模式】【行为型模式】访问者模式(Visitor)
一、入门 什么是访问者模式? 访问者模式(Visitor Pattern)是一种行为设计模式,允许你将算法与对象结构分离。通过这种方式,可以在不改变对象结构的情况下,向对象结构中的元素添加新的操作。
236 10
|
人工智能 IDE Devops
当「软件研发」遇上 AI 大模型
大模型和软件工具链的结合,使软件研发进入下一个时代。那它第一个落脚点在哪?实际上就是辅助编程,所以我们就开始打造了通义灵码这款产品,它是一个基于代码大模型的的 AI 辅助工具。本文会分为三个部分来分享。第一部分先介绍 AIGC 对软件研发的根本性影响,从宏观上介绍当下的趋势;第二部分将介绍 Copilot 模式,第三部分是未来软件研发 Agent 产品的进展。
523 89
|
人工智能 弹性计算 运维
触手可及:阿里云函数计算助力AI大模型的评测
阿里云推出的面向AI服务器的功能计算(Functional Computing, FC),专为AI应用提供弹性计算资源。该服务支持无服务器部署、自动资源管理和多语言支持,极大简化了AI应用的开发和维护。本文全面评测了FC for AI Server的功能特性、使用体验和成本效益,展示了其在高效部署、成本控制和安全性方面的优势,并通过具体应用案例和改进建议,展望了其未来发展方向。
519 4
|
存储 NoSQL Shell
经验大分享:TDB文件介绍
经验大分享:TDB文件介绍
392 0
|
Oracle Java 关系型数据库
@Id、@GeneratedValue的作用,以及@GeneratedValue的使用
@Id、@GeneratedValue的作用,以及@GeneratedValue的使用
|
设计模式 Java API
设计模式-------------静态/动态代理模式(结构型设计模式)
本文详细介绍了代理模式,包括其定义、应用场景、UML类图、代码实现和实际例子,阐述了静态代理和动态代理的区别以及它们的优缺点,展示了如何通过代理模式来控制对目标对象的访问并增强其功能。
|
数据格式
Element el-cascader 级联选择器详解
本文目录 1. 概述 2. 数据绑定 2.1 默认数据绑定 2.2 指定绑定数据格式 3. 常用功能 3.1 修改触发方式 3.2 增加清空按钮 3.3 可搜索 3.4 选中项只显示最后一级 3.5 可选中任意一级 3.6 面板样式 3.7 自定义节点内容 4. 动态加载下级 5. 小结
4182 0
|
XML SpringCloudAlibaba Java
Spring注解配置:@Configuration 和 @Component 区别及原理详解
随着`Spring Boot`的盛行,注解配置式开发受到了大家的青睐,从此告别了基于`Spring`开发的繁琐`XML`配置。这里先来提纲挈领的了解一下`Spring`内部对于配置注解的定义,如`@Component、@Configuration、@Bean、@Import`等注解,从功能上来讲,这些注解所负责的功能的确不相同,但是
706 1