桥梁模式 ----- bridge
桥梁模式的用意是将问题的抽象和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题。
比如我们有一个画图程序 有2个图形(Circle Rectangle )和2种画图方法(Drawing1 Drawing2)
图形可能会使用Drawing1来画图 也可能使用Drawing2来画图
在这个画图程序中有两个可变因素 一个是图形的种类 有可能会增加新的图形 另一个是画图方法 可能会有Drawing3出现
当系统有两个可变因素时 我就应该考虑到桥梁模式,至少它应该在你的脑子里闪过
在面向对象设计中有两条重要原则
1.找出变化并封装之
2.优先使用聚合而不是继承
这两条将在桥梁模式中得到完美体现
在上例中图形是一个变化 我们可以抽象出一个形状接口 和 一些形状类
interface Shape{ void doDraw();}class Circle implements Shape{}class Rectangle implements Shape{}interface Drawing{ void draw();}class Drawing1 implements Drawing{}class Drawing2 implements Drawing{}class Circle implements Shape{ private Drawing drawing; public Circle(Drawing drawing){ this.drawing = drawing; } public void doDrow(){ drawing.draw(); }}class Client(){ public static void main(String[] args){ Shape circle = new Circle(new Drawing2()); circle.draw(); }}interface Dao{ List findAll();}class HibernateUserDao implements Dao{}class JdbcUserDao implements Dao{}interface UserService{ List findAllUser();}class UserServiceImpl implements UserService{ private Dao dao; public UserServiceImpl(Dao dao){ this.dao = dao; } public List findAllUser(){ dao.findAll(); }}