亲宝软件园·资讯

展开

Java合成复用原则

温故知新之java 人气:0

定义

合成复用原则(Composite Reuse Principle),即尽量使用组合/聚合的方式,而不是使用继承。

案例

需求

现在假设有一个A类,里面有两个方法,有一个B类,想要复用这两个方法,请问有几种方案

方案一

继承的方式 定义A类,并定义两个方法

/**
 * 类A
 * @author:liyajie
 * @createTime:2022/2/9 9:50
 * @version:1.0
 */
public class A {
    public void method1(){
        System.out.println("你调用了方法一");
    }

    public void method2(){
        System.out.println("你调用了方法二");
    }
}

定义B类,并继承A类

/**
 * 类B
 * @author:liyajie
 * @createTime:2022/2/9 9:51
 * @version:1.0
 */
public class B extends A{
}

定义测试类

/**
 * 测试类
 * @author:liyajie
 * @createTime:2022/2/9 9:52
 * @version:1.0
 */
public class Test {
    public static void main(String[] args) {
        new B().method1();
        new B().method2();
    }
}

查看结果

方案二

组合或者聚合方式 定义A类,并定义两个方法 和方案一相同,无需修改 定义B2类

/**
 * 类B2
 * @author:liyajie
 * @createTime:2022/2/9 9:51
 * @version:1.0
 */
public class B2{

    A a = new A();

    public void method1(){
        a.method1();
    }

    public void method2(){
        a.method2();
    }
}

定义测试类

/**
 * 测试类
 * @author:liyajie
 * @createTime:2022/2/9 9:52
 * @version:1.0
 */
public class Test2 {
    public static void main(String[] args) {
        new B().method1();
        new B().method2();
    }
}

查看结果

方案三

依赖方式 定义A类,并定义两个方法 和方案一相同,无需修改

定义B3类

/**
 * 类B3
 * @author:liyajie
 * @createTime:2022/2/9 9:51
 * @version:1.0
 */
public class B3 {

    public void method1(A a){
        a.method1();
    }

    public void method2(A a){
        a.method2();
    }
}

定义测试类

对比分析

方案一,使用继承方式,B类继承了A类之后,就可以使用了A类中的两个方法,这样耦合性较高,不推荐

方案二,该方案即为组合/聚合的方式,在B类里注入A,通过注入的A类来调用方法,耦合性低,易扩展。符合合成复用的原则,推荐

方案三,该方案通过把A类作为参数传递到B类的两个方法中,从而达到调用A类的方法,耦合性低。符合合成复用的原则,推荐

总结

合成复用原则简单理解就一句话,尽量使用聚合和组合的方式,进行解耦,降低耦合性,而不是使用继承。至此java设计模式的七大原则,我们就整理完毕,下面我们来概括归纳一下:

设计原则的核心思想

一切为了程序高内聚,低耦合服务

1.找出应用中可能需要变化之处,独立出来,不要和不需要变化的代码混在一起

2.针对接口编程,而不是针对实现编程

3.为了交互对象的松耦合设计而努力

加载全部内容

相关教程
猜你喜欢
用户评论