用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
必知必会的设计原则——合成复用原则
必知必会的设计原则——合成复用原则
东湖之滨
论坛元老
|
2023-2-14 14:14:24
|
显示全部楼层
|
阅读模式
楼主
主题
1745
|
帖子
1745
|
积分
5239
设计原则系列文章
必知必会的设计原则——单一职责原则
必知必会的设计原则——开放封闭原则
必知必会的设计原则——依赖倒置原则
必知必会的设计原则——里氏替换原则
必知必会的设计原则——接口隔离原则
必知必会的设计原则——迪米特原则
必知必会的设计原则——合成复用原则
概述
在面向对象设计中,可以通过两种方法在不同的环境中复用已有的设计和实现,即通过组合/ 聚合关系或通过继承,但首先应该考虑使用组合/聚合,组合/聚合可以使系统更加灵活,降低 类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂 度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继 承复用。合成复用原则又称为组合/聚合复用原则;尽量使用对象组合,而不是继承来达到复用。
“某种程度上 继承有问题”:破坏了系统的封装性,基类发生了改变,子类的实现也会发生改变;子类如果不需要基类中的方法,那么系统耦合性就开始变高;
继承是静态的,不能在程序运行时发生改变;
以上图片展示的关于汽车继承案例问题,这个需求如果增加,可以一直继承下去,系统慢慢...
继承案例代码
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开发 ...
dotnet 6 为什么网络请求不跟随系统网 ...
从0到1实现一套CICD流程之CD
大二C#实现酒店管理系统(C端展示、前 ...
VMware虚拟机安装黑群晖7.1
当我们在聊「开源大数据调度系统Taier ...
ABP Framework 7.0 RC 新增功能简介 ...
RequestDispatcher具有什么功能呢? ...
函数返回值,静态动态数组
测试大姐提了个bug,为什么你多了个opti ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Oracle
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表