• 合成复用原则~


    合成复用原则是面向对象设计中的一个原则,该原则的提出就是为了复用已有的设计和实现,而在面向对象设计中,可以通过两种基本方法达到该目的,即通过组合/聚合关系或通过继承,本原则是通过组合/聚合关系,即为在一个新的对象里通过组合关系和聚合关系 来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用其已有功能的目的,之所以不推荐继承是因为它破坏系统的封装性,假设B是A的子类,B去继承A,那么就知道了A的属性与行为;因此当A发生改变后B 也要改变,父类发生改变,子类受到牵连,同时也增加了二者之间的耦合度,并且从基类继承而来的实现是静态的不能在运行时发生改变,没有足够的灵活性;只能在有限的环境中使用。

    举例:

    Animal是父类,Dog是子类,为了实现对Animal类中代码的复用,由此通过创建Animal对象,使用创建的animal类的对象调用Animal类中的方法,避免了在Dog类中重复实现eat()方法,这种方式是通过组合而不是继承

    package druidResources;
    
    class Animal {// 父类
        public void eat() {
            System.out.println("Animal is eating");
        }
    }
    // 子类
    class Dog{
       private Animal animal;
    
        public Dog() {
        //创建Animal类的对象实现代码的复用
            this.animal = new Animal();
        }
        public void eat() {
            animal.eat();
        }
    }
    // 测试类
    public class CompositeReusePrincipleTest {
        public static void main(String[] args) {
            Dog dog = new Dog();
            dog.eat();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    输出:

    Animal is eating
    
    • 1
  • 相关阅读:
    【Python抢票神器】火车票枪票软件到底靠谱吗?实测—终极攻略。
    [Linux] 进程等待
    数据结构之—顺序表和链表
    Vim实用技巧_2.普通模式和插入模式
    MySql主从同步实践
    使用vue-cli搭建SPA项目
    数学知识之约数
    word使用笔记
    QT人脸识别知识
    第一百五十八回 SliverGrid组件
  • 原文地址:https://blog.csdn.net/m0_64365419/article/details/133215707