java面向对象设计原则之合成复用原则示例详解

网友投稿 276 2022-09-22


java面向对象设计原则之合成复用原则示例详解

目录概念示例拓展

概念

尽量使用合成/聚合,而不是使用继承实现复用。所谓的合成/聚合是指一个对象里持有另外一个类的对象,通过调用这些对象的方法得到复用已有功能的目的。如:报文解译程序中,按照继承复用可以设计为:

子类调用父类的方法即可完成水文报文解译、气象解译中通用方法;子类中一定包含了父类的方法,这个叫继承复用。

按照合成/聚合原则设计为:

水文协议和气象协议中,持有编码和位制转换对象,通过调用对象方法即可完成复用。

示例

数据库连接的复用:首先看通过集成关系复用数据连接代码如下

public class SqlServerConnect {

private Connection con = null;

public Connection getCon() {

System.out.println("创建数据库连接");

return con;

}

}

public class UserDao extends SqlServerConnect {

//继承复用连接数据

public void queryData()

{

Connection con =getCon();

String sql = "select * from emp";

try {

Statement statement = con.createStatement();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

UserDao继承了SqlServerConnect,复用了父类的getCon()方法;如果此时数据库不再使用SQLServer,要改成oracle,这种复用就无能为力了。

使用合成复用,代码可以修改为:

//增加一个接口

public interface DatabaseConnection {

Connection getCon();

}

//SqlServerConnect实现该接口

public class SqlServerConnect implements DatabaseConnection {

private Connection con = null;

@Override

public Connection getCon() {

System.out.println("创建数据库连接");

return con;

}

}

//clsUserDaoNew和数据库连接接口呈现聚合关系,使用依赖倒置,可动态替换此类,复用了getCon()代码

public class UserDaoNew {

private DatabaseConnection objCon;

public UserDaoNew(DatabaseConnection conn){

objCon = conn;

}

public void queryData() {

Connection con = objCon.getCon();

String sql = "select * from emp";

try {

Statement statement = con.createStatement();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

在UserDaoNew类中,通过使用聚合关系,通过构造注入一个数据连接对象,通过调用这个对象的getCon()方法实现复用。这种方式,利用里氏代换和依赖倒置原则,当使用SQLServer数据库时,注入SqlServerConnect实例,如果使用oracle数据库时,注入OrcaleConnect实例,代码更加灵活,实现动态复用。

拓展

1.继承是静态复用,通过聚合复用是动态复用。所谓的静态复用是在编码阶段已经明确了类之间的关系;动态复用则是在程序运行阶段,根据实际要求注入相应的对象完成复用的,动态复用比静态复用更具有灵活性。

2.合成复用原则还体现复用范围扩大了。如上图所示,使用继承关系,则BCD转ASCII码只服务报文解译,如一个加密程序也要使用BCD转ASCII、数据位制转换,就没办法使用。

以上就是java面向对象设计原则之合成复用原则示例详解的详细内容,更多关于java面向对象设计原则的资料请关注我们其它相关文章!


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

上一篇:OSPF报文格式详解(OSPF的报文类型)
下一篇:读书笔记(读书笔记30篇)
相关文章

 发表评论

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