论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
必知必会的设计原则——合成复用原则
必知必会的设计原则——合成复用原则
东湖之滨
金牌会员
|
2023-2-14 14:14:24
|
显示全部楼层
|
阅读模式
楼主
主题
944
|
帖子
944
|
积分
2836
设计原则系列文章
必知必会的设计原则——单一职责原则
必知必会的设计原则——开放封闭原则
必知必会的设计原则——依赖倒置原则
必知必会的设计原则——里氏替换原则
必知必会的设计原则——接口隔离原则
必知必会的设计原则——迪米特原则
必知必会的设计原则——合成复用原则
概述
在面向对象设计中,可以通过两种方法在不同的环境中复用已有的设计和实现,即通过组合/ 聚合关系或通过继承,但首先应该考虑使用组合/聚合,组合/聚合可以使系统更加灵活,降低 类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂 度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继 承复用。合成复用原则又称为组合/聚合复用原则;尽量使用对象组合,而不是继承来达到复用。
“某种程度上 继承有问题”:破坏了系统的封装性,基类发生了改变,子类的实现也会发生改变;子类如果不需要基类中的方法,那么系统耦合性就开始变高;
继承是静态的,不能在程序运行时发生改变;
以上图片展示的关于汽车继承案例问题,这个需求如果增加,可以一直继承下去,系统慢慢...
继承案例代码
public class A
{
public void Methond1()
{
Console.WriteLine("我是方法1");
}
public void Methond2()
{
Console.WriteLine("我是方法2");
}
public void B_Methond3()
{
Console.WriteLine("我是方法3");
}
}
public class B : A
{
public void MethondB()
{
}
}
public class C : B
{
public void MethondC()
{
}
}
public class D : C
{
public void MethondD()
{
}
}
复制代码
结论:问题是有些方法B类并不需要,然而在A类中实现后,B类都需要继承,这就是问题,导致职责不清晰,越来越臃肿!以后新增需求,像C又继承B...
关于汽车案例的需求改用合成复用原则实现
public interface IColor
{
public string ShowCar();
}
public class Green : IColor
{
public string ShowCar()
{
return "绿色";
}
}
public class Red : IColor
{
public string ShowCar()
{
return "红色";
}
}
//)——————————————————————————————————————————————————
public abstract class Car
{
public abstract void Run(IColor color);
}
public class QyCar : Car
{
public override void Run(IColor color)
{
Console.WriteLine($"汽油式的{color.ShowCar()}颜色车在行驶");
}
}
public class DdCar : Car
{
public override void Run(IColor color)
{
Console.WriteLine($"电动式的{color.ShowCar()}颜色车在行驶");
}
}
复制代码
结论:像这个汽车行驶的需求,不管以后又有黑色的、蓝色的汽车,或者加水的汽车之类都做好了扩展,不用再使用继承去解决这个问题。
总结
关于合成复用原则在现实编码过程中,尤其对重构系统特别有用,所有的设计原则系列文章都已经更新完毕,有何疑问,欢迎交流。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
东湖之滨
金牌会员
这个人很懒什么都没写!
楼主热帖
《HarmonyOS开发 - 小凌派-RK2206开发 ...
当我们在聊「开源大数据调度系统Taier ...
VMware虚拟机安装黑群晖7.1
从0到1实现一套CICD流程之CD
ABP Framework 7.0 RC 新增功能简介 ...
大二C#实现酒店管理系统(C端展示、前 ...
MySQL视图
dotnet 6 为什么网络请求不跟随系统网 ...
MySQL8.0 优化器介绍(二)
[ARM 汇编]高级部分—ARM汇编编程实战 ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表