赞
踩
桥接模式(Bridge Pattern)属于结构型模式。用于将抽象与其实现解耦,使得二者可以独立变化。桥接模式使用组合/聚合替代继承,从而连接功能层面与实现层面,把强关联转为弱关联之后进行双向扩展
适配器模式可以在抽象层不变的情况下,对实现进行扩展和变化;而桥接模式可以在抽象和实现两个维度独立扩展和变化
JPA是ORM框架的抽象,或者说是Java提供的持久化标准,而Hibernate与TopLink则是ORM框架的具体实现,而在Hibernate框架下,又有针对一系列数据库厂商的具体实现,图中是以继承的方式表现Hibernate、TopLink框架下不同数据库厂商的行为变化
上图我们将ORM框架数记为N,将数据库厂商数记为M,如果要新增一个ORM框架,就会生成M个子类,如果新增了一个数据库厂商,就要新增N个子类,两个维度不能够独立的进行扩展,而且最终子类的个数是N*M,代码复杂度会指数型增长,可能会造成类爆炸
JDBC是Java提供的访问关系型数据库的一套标准,根据合成复用原则(组合/聚合优先于继承),在JPA中组合了不同数据库厂商的抽象,此时就在功能层面和实现层面建立起了一座桥梁,无论是ORM框架个数还是数据库厂商的个数都可以进行独立的扩展了,而最终子类的个数仅是N+M
业务代码
//抽象化角色 public abstract class JPA { protected JDBC jdbc; protected JPA(JDBC jdbc) { this.jdbc = jdbc; } public abstract void insert(); } //扩展抽象化角色 class Hibernate extends JPA{ protected Hibernate(JDBC jdbc) { super(jdbc); } @Override public void insert() { System.out.println("Hibernate环境"); jdbc.insert(); } } //扩展抽象化角色 class TopLink extends JPA{ protected TopLink(JDBC jdbc) { super(jdbc); } @Override public void insert() { System.out.println("TopLink环境"); jdbc.insert(); } } interface JDBC{ void insert(); } //具体实现化角色 class MySQL implements JDBC{ @Override public void insert() { System.out.println("MySQL执行新增操作"); } } //具体实现化角色 class Oracle implements JDBC{ @Override public void insert() { System.out.println("Oracle执行新增操作"); } }
客户端
public class Client {
public static void main(String[] args) {
//数据库厂商
JDBC jdbc = new MySQL();
//ORM框架
JPA jpa = new Hibernate(jdbc);
jpa.insert();
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。