类与接口,桥接模式

2019-03-03  本文已影响0人  NazgulSun

周末,想起要每天搞一篇设计模式

优秀的java开发,离不开类的继承和接口的实现,但是通常选择继承还是接口有时候让人迷惑。

直到有人告诉我,类的继承属于功能性,类的接口属于实现层面,要想理解好桥接模式,就需要好好的理解了功能性和实现层面的不同。

比如 车是一个类, 宝马,奔驰不同的品牌,最好是用继承,而电动,采油,汽油车,这个属于动力实现方面,最好采用接口来实现,那么对于电动宝马,电动奔驰,怎么实现呢?

桥接模式下,就是把汽车车身做好,然后把一个电动发动机放进去,这个放进去的过程就是属于桥接。

桥接模式的精髓就在于此, 通过类的继承实现功能性的变化的封装,通过放入一个对实现的接口的引用,做到对实现方式的变化的封装。

在java中 有两个比较有名的例子来实现桥接模式,一个是 logg4j

通常,log 的子类 有  MemoryLogger, consoleLogger,NetworkLogger 等,并且他们提供的log 方法,可以有很多种formatter格式,比如 text, html, jpg。

我们在做实现的时候,不可能 实现  TextMemoryLog,HtmlMemoryLog。。。。,这会造成类的爆炸,并且对新功能的加入很麻烦。

我们做法是 在 MemoryLog,ConsoleLog 里 放入一个 Formatter的引用,通过一种组合的方式,实现两个维度的变化。

还有一个常用的例子是java  的jdbc 接口。

其实他的Connection模块就是使用 桥接模式来实现的。

Connection  下面有 MysqlConnection, OracleConnection等,每个Connection 里面又可以实现 Statement相关功能,对应MysqlStatement, OracleStatement 

jdbc 里面,让Connection 里放入一个对 statement接口的引用,完成对两个维度变化的封装。

有兴趣的可以看看 这部分的代码。

对继承和接口的精确使用是关键。

上一篇下一篇

猜你喜欢

热点阅读