java 桥接模式实现代码

java 桥接模式实现代码

写在前面

桥接模式:将抽象与实现分离,使它们可以独立变化。它是用组合/聚合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

使用场景1:要绘制矩形、圆形、椭圆、正方形,绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,我们可以设计颜色和形状两个变化维度:

我们设计一个抽象化角色"颜色",然后让红色、绿色、蓝色统一继承自"颜色",让矩形、圆形、椭圆、正方形统一继承自一个接口"形状"。"颜色"的构造方法中传入"形状"这个接口,这样"颜色"和"形状"就桥接起来了

使用场景2:手机、电脑电视都需要接收消息,消息又分为紧急消息、普通消息,这时候我们就可以把"系统"和"消息"抽象出来桥接。如下有具体实现代码

1、桥接模式实例

以不同的系统需要接收不同的消息为例

1.1、消息类

抽象消息类

public abstract class AbstractMessage {    //持有一个实现部分的对象    MessageImplementor impl;    public AbstractMessage(MessageImplementor impl){        this.impl = impl;    }    /**     * 发送消息,委派给实现部分的方法     * @param message    要发送消息的内容     * @param toUser    消息的接受者     */    public void sendMessage(String message , String toUser){        this.impl.send(message, toUser);    }}

普通消息

public class CommonMessage extends AbstractMessage {     public CommonMessage(MessageImplementor impl) {        super(impl);    }    @Override    public void sendMessage(String message, String toUser) {        // 对于普通消息,直接调用父类方法,发送消息即可        super.sendMessage(message, toUser);    }}

紧急消息

public class UrgencyMessage extends AbstractMessage {     public UrgencyMessage(MessageImplementor impl) {        super(impl);    }    @Override    public void sendMessage(String message, String toUser) {        message = "加急:" + message;        super.sendMessage(message, toUser);    }    /**     * 扩展自己的功能,监控某消息的处理状态     * @param messageId    被监控的消息编号     * @return    监控到的消息的处理状态     */    public Object watch(String messageId) {        // 根据消息id获取消息的状态,组织成监控的数据对象,然后返回        return null;    }} 

1.2、系统类

系统接口

public interface MessageImplementor {    /**     * 发送消息     * @param message 要发送消息的内容     * @param toUser  消息的接受者     */    public void send(String message , String toUser);}

手机

public class Phone implements MessageImplementor {     @Override    public void send(String message, String toUser) {                System.out.println("使用系统内短消息的方法,发送消息'"+message+"'给"+toUser);    } }

电脑

public class Pc implements MessageImplementor {     @Override    public void send(String message, String toUser) {        System.out.println("使用邮件短消息的方法,发送消息'"+message+"'给"+toUser);    } }

1.3、使用

public class Client {     public static void main(String[] args) {        // 手机发送        MessageImplementor impl = new Phone();        AbstractMessage message = new CommonMessage(impl);        message.sendMessage("加班申请速批--来自手机","李总");                // 电脑发送        impl = new Pc();        message = new UrgencyMessage(impl);        message.sendMessage("加班申请速批---来自电脑","李总");    } }

2、JDBC

在java中jdbc是使用桥接模式实现的

2.1、jdbc连接实例

import java.sql.*; public class JdbcTest {     public static void main(String[] args) throws ClassNotFoundException, SQLException{        // 需要导入mysql-connector-java-8.0.27.jar,数据库test、用户名root,密码root        Class.forName("com.mysql.cj.jdbc.Driver");        Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","root");        PreparedStatement ps = conn.prepareStatement("SELECT * FROM user");        ResultSet rs = ps.executeQuery();        if (rs.next()) {            System.out.println("id :"+rs.getInt("id")+",name :"+rs.getInt("id"));        }        rs.close();        ps.close();    }}
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部