Java设计模式七大原则之合成复用原则详解

网友投稿 255 2022-08-29


Java设计模式七大原则之合成复用原则详解

目录定义案例需求方案一方案二方案三对比分析总结设计原则的核心思想

定义

合成复用原则(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) {yjpbPCfcD

new B().methyjpbPCfcDod1();

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:1http://.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 vohttp://id 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.为了交互对象的松耦合设计而努力


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python多线程get与post请求模板代码(python多线程请求接口)
下一篇:python多线程异步post请求脚本,可以设置持续运行时间、线程数、时间间隔
相关文章

 发表评论

暂时没有评论,来抢沙发吧~