亲宝软件园·资讯

展开

Java结构型模式之桥接模式详解

非凡的小笨鱼 人气:0

一.介绍

桥接模式(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

三.UML类图

四.具体代码

业务代码

//抽象化角色
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();
    }
}

五.优缺点

优点

缺点

六.使用场景

加载全部内容

相关教程
猜你喜欢
用户评论