必知必会的设计原则——合成复用原则(代码片段)

realyrare realyrare     2023-02-14     300

关键词:

 设计原则系列文章 

  1. 必知必会的设计原则——单一职责原则
  2. 必知必会的设计原则——开放封闭原则
  3. 必知必会的设计原则——依赖倒置原则
  4. 必知必会的设计原则——里氏替换原则
  5. 必知必会的设计原则——接口隔离原则
  6. 必知必会的设计原则——迪米特原则
  7. 必知必会的设计原则——合成复用原则

概述

在面向对象设计中,可以通过两种方法在不同的环境中复用已有的设计和实现,即通过组合/ 聚合关系或通过继承,但首先应该考虑使用组合/聚合,组合/聚合可以使系统更加灵活,降低 类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂 度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继 承复用。

合成复用原则又称为组合/聚合复用原则;尽量使用对象组合,而不是继承来达到复用。

“某种程度上 继承有问题”:破坏了系统的封装性,基类发生了改变,子类的实现也会发生改变;子类如果不需要基类中的方法,那么系统耦合性就开始变高;继承是静态的,不能在程序运行时发生改变;

以上图片展示的关于汽车继承案例问题,这个需求如果增加,可以一直继承下去,系统慢慢...

继承案例代码

    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()颜色车在行驶");
        
    

结论:像这个汽车行驶的需求,不管以后又有黑色的、蓝色的汽车,或者加水的汽车之类都做好了扩展,不用再使用继承去解决这个问题。

总结

关于合成复用原则在现实编码过程中,尤其对重构系统特别有用,所有的设计原则系列文章都已经更新完毕,有何疑问,欢迎交流。

必知必会的设计原则——依赖倒置原则(代码片段)

概述开放封闭原则是面向对象的设计的中级目标,而依赖倒置原则是实现开放封闭原则的基础。如果开放封闭原则是设计大楼的蓝田,那么依赖倒置原则就是大楼的钢铁架构。高层模块(调用者)不应该依赖于低层模块(被调用... 查看详情

必知必会的设计原则——开放封闭原则(代码片段)

概述开放封闭原则是面向对象所有原则的核心。对功能扩展开放,面向修改代码封闭。需求改变时,在小改变软件实体源代码(类、接口、方法等)的前提下通过扩展功能使其满足新的需求。需求描述不同需求的用户去银行办理... 查看详情

必知必会的设计原则——单一职责原则

概述单一职责原则是最简单的面向对象设计原则!定义为不要存在多于一个导致类变更的原因。通俗地说,即一个类只负责一项职责。说文字比较干巴巴,我们通过上代码来展示案例;未使用单一职责原则的代码p... 查看详情

必知必会的设计原则——开放封闭原则

概述开放封闭原则是面向对象所有原则的核心。对功能扩展开放,面向修改代码封闭。需求改变时,在小改变软件实体源代码(类、接口、方法等)的前提下通过扩展功能,使其满足新的需求。需求描述不同... 查看详情

必知必会的设计原则——迪米特原则

概述迪米特法则(LawofDemeter)又叫做最少知识原则,即一个对象应该对另一个对象有最少的了解。迪米特法则的目的在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能... 查看详情

设计模式软件设计七大原则(合成复用原则|代码示例)(代码片段)

文章目录一、合成复用原则简介二、合成复用与继承复用优缺点三、合成复用原则代码示例1、继承复用代码示例2、合成复用代码示例一、合成复用原则简介合成复用原则又称为组合复用原则,合成/聚合复用原则,组合/聚合复用原... 查看详情

elasticsearch必知必会的干货知识二:es索引操作技巧(代码片段)

该系列上一篇文章《Elasticsearch必知必会的干货知识一:ES索引文档的CRUD》讲了如何进行index的增删改查,本篇则侧重讲解说明如何对index进行创建、更改、迁移、查询配置信息等。仅创建索引:PUTindexPUT/index添加字段设置(mappings... 查看详情

大数据必知必会的-linux命令(代码片段)

用户的创建和删除命令用户创建和密码设置useradd用户名passwd用户名useradditheima#创建新用户itheimapasswditheima#设置用户itheima密码用户删除user-r用户名userdel-ritheima#删除用户itheima权限管理命令文件权限概述Linux操作系统是多任务多用... 查看详情

大数据必知必会的-linux命令(代码片段)

用户的创建和删除命令用户创建和密码设置useradd用户名passwd用户名useradditheima#创建新用户itheimapasswditheima#设置用户itheima密码用户删除user-r用户名userdel-ritheima#删除用户itheima权限管理命令文件权限概述Linux操作系统是多任务多用... 查看详情

大数据必知必会的-linux命令(代码片段)

终端命令格式command[-options][parameter]说明:command:命令名,相应功能的英文单词或单词的缩写[-options]:选项,可用来对命令进行控制,也可以省略parameter:传给命令的参数,可以是零个、一个或者多个显示文件列表命令ls是英文单词list的简... 查看详情

大数据必知必会的-linux命令(代码片段)

终端命令格式command[-options][parameter]说明:command:命令名,相应功能的英文单词或单词的缩写[-options]:选项,可用来对命令进行控制,也可以省略parameter:传给命令的参数,可以是零个、一个或者多个显示文件列表命令ls是英文单词list的简... 查看详情

大数据必知必会的-linux命令(代码片段)

文件操作命令touch命令touch命令创建文件touch文件路径toucha.txt#在当前目录创建a.txt文件touch/root/a.txt#在/root目录创建a.txt文件mv命令通过mv命令可以用来移动文件或目录,也可以给文件或目录重命名1)将文件移动另一个目录中࿱... 查看详情

持续更新,建议收藏python必知必会的知识点,极大提升开发效率(代码片段)

问题本文主要介绍Python编程的一些必知必会的知识点,方便后续编程,提升效率。方法字符串转整数#字符串是普通整数a=int('1000')print(a)#1000#字符串是二进制b=int('1000',2)print(b)#8#整数转固定长度的二进制... 查看详情

linux必知必会的基本命令和部署项目流程(代码片段)

Linux的基本命令Linux下我们的输入被以空格(个数不限)分割成多个部分(命令+参数),如果某个部分中自带空格,需要使用引号引起来。命令一般自带帮助文档,使用命令--help查看。命令的大多数选项都是-[字母]或--[字母]... 查看详情

持续更新,建议收藏python必知必会的知识点,极大提升开发效率(代码片段)

问题本文主要介绍Python编程的一些必知必会的知识点,方便后续编程,提升效率。方法整数列表join设有一个整数列表,实现连接所有整数形成一个字符串,如下:d=[1,2,3,4]print(''.join(d))很遗憾,上... 查看详情

省时提效!5个必知必会的sql窗口函数!(代码片段)

SQL是数据世界中的通用语言,是作为数据科学人员必备技能。它之所以如此重要,是因为许多数据探索、数据操作、管道开发和仪表板创建都是通过SQL完成的。想要利用SQL高效处理数据任务,掌握一些窗口函数非常有... 查看详情

5个必知必会的python数据合并技巧(代码片段)

大家好,前不久在我们技术交流群有群友提到最近他面试阿里70万总包的数据岗位,对方问Pandas的5种数据合并的函数,结果他只答出了2个。那么,究竟是哪五个呢?今天,我们就来带大家了解一下!想... 查看详情

架构实践架构师必知必会的5种业界主流的架构风格

 【架构实践】架构师必知必会的5种业界主流的架构风格目录 【架构实践】架构师必知必会的5种业界主流的架构风格 查看详情