• 设计模式之合成/聚合利用原则(CARP)


    一、概念

    CARP:CompositionAggregation Principle

    合成聚合复用原则,尽量使用合成/聚合,尽量不使用类继承。合成聚合是“has  a”的关系,而继承是“is  a”的关系。由于继承是一中强耦合的结构,父类变,子类必变。所以不是“is  a”关系,我们一般不要用继承。优先使用合成聚合复用原则,有助于保持每个类的封装,降低继承的层次。合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。它的设计原则是;要尽量使用合成/聚合,尽量不要使用继承。

    就是说要少用继承,多用合成关系来实现。我曾经这样写过程序:有几个类要与数据库打交道,就写了一个数据库操作的类,然后别的跟数据库打交道的类都继承这个。结果后来,我修改了数据库操作类的一个方法,各个类都需要改动。"牵一发而动全身"!面向对象是要把波动限制在尽量小的范围。

    一句话点评:优生优育,不要盲目繁衍。

    二、聚合与合成的优缺点:

    优点:

    1、新对象存取成分对象的唯一方法是通过成分对象的接口。

    2、此原则是黑箱复用,因为成分对象的内部细节对新对象而言是看不到的。

    3、此原则复用支持包装。

    4、此原则复用所需的依赖较少。

    5、每一个新的类可以将焦点集中在一个任务上。

    6、此原则复用可以在运行时间内动态进行,新对象可以分理处态的引用与成分对象类型相同的对象。

    缺点:

    1、系统中会有比较多的对象需要管理

    三、继承的优缺点:

    优点:

    1、新的实现较为容易,因为超类的大部分功能可以通过继承的关系自动进入子类。

    2、修改和扩展继承而来的实现较为容易。

    缺点:

    1、继承复用破坏包装,因为继承将超类的实现细节暴露给子类。由于超类的内部细节常常是对于子类透明的,所以这种复用是透明的复用,又称“白箱”复用。

    2、如果超类发生改变,那么子类的实现也不得不发生改变。

    3、从超类继承而来的实现是静态的,不可能在运行时间内发生改变,没有足够的灵活性。

  • 相关阅读:
    前端 -- html
    MySQL索引
    Python操作MySQL
    MySQL表操作进阶
    MySQL表操作基础
    Github使用教程
    Android开发面试题
    MYSQL学习记录
    Java开发从零到现在
    JavaWeb(JSP/Servlet/上传/下载/分页/MVC/三层架构/Ajax)
  • 原文地址:https://www.cnblogs.com/8090sns/p/3749847.html
Copyright © 2020-2023  润新知