桥接模式(BridgePattern)

365 阅读2分钟

桥接模式定义

桥接模式也称为桥梁模式、接口模式或柄体模式,是将抽象部分与它的具体实现部分分离,使他们都可以独立地变化,通过组合的方式建立两个类之间的联系,而不是用继承,属于结构性模式。

  • 抽象维度和实现维度

优点

  1. 分离抽象部分及其具体实现部分
  2. 提高了系统的扩展性
  3. 符合开闭原则
  4. 符合合成复用原则

例子1

1、桥接模式之前

image.png

public interface ICourse {
}
public class JavaCourse implements ICourse {
}
public class PythonCourse implements ICourse {
}
public interface INote {
    void edit();
}
public class JavaNote implements INote {
    @Override
    public void edit() {

    }
}
public class PythonNote implements INote {
    @Override
    public void edit() {

    }
}
public interface IVideo {
}
public class JavaVideo implements IVideo {
}
public class PythonVideo implements IVideo {
}

2、桥接模式之后

在上方代码基础改动,增加桥AbstractCourse.java image.png

public class JavaCourse extends AbstractCourse {
}
public class PythonCourse extends AbstractCourse {
}
public class AbstractCourse implements ICourse{
    private INote note;
    private IVideo video;

    public void setNote(INote note) {
        this.note = note;
    }

    public void setVideo(IVideo video) {
        this.video = video;
    }

    @Override
    public String toString() {
        return "AbstractCourse{" +
                "note=" + note +
                ", video=" + video +
                '}';
    }
}

例子2

image.png

1、桥接模式之前

/**
 * 发送消息顶层接口
 */
public interface IMessage {
    void send(String message,String toUser);
}
/**
 * 邮件信息
 */
public class EmailMessage implements IMessage {
    @Override
    public void send(String message, String toUser) {
        System.out.println(message+"。发送给:"+ toUser);
    }
}
/**
 * 手机短信
 */
public class SmsMessage implements IMessage {
    @Override
    public void send(String message, String toUser) {
        System.out.println(message +"。发送给:"+ toUser);
    }
}
/**
 * 普通信息
 */
public class NomalMessage {
    public void sendMessage(String message, String toUser) {
        System.out.println("[普通]" + message + "-》发送给:" + toUser);
    }
}
/**
 * 加急信息
 */
public class UrgencyMessage {

    public void sendMessage(String message, String toUser) {
        System.out.println("[加急]" + message + "-》发送给:" + toUser);
    }
}

2、桥接模式之后

image.png

/**
 * 发送消息顶层接口
 */
public interface IMessage {
    void send(String message,String toUser);
}
/**
 * 邮件信息
 */
public class EmailMessage implements IMessage {
    @Override
    public void send(String message, String toUser) {
        System.out.println(message+ toUser);
    }
}
/**
 * 手机短信
 */
public class SmsMessage implements IMessage {
    @Override
    public void send(String message, String toUser) {
        System.out.println(message +toUser);
    }
}
/**
 * 桥接
 */
public abstract class AbstractMessage {
    private IMessage message;

    public AbstractMessage(IMessage message) {
        this.message = message;
    }

    void sendMessage(String message,String toUser) {
        this.message.send(message,toUser);
    }
}
/**
 * 加急信息
 */
public class UrgencyMessage extends AbstractMessage{

    public UrgencyMessage(IMessage message) {
        super(message);
    }

    public void sendMessage(String message, String toUser) {
        message = "[加急]" + message + "-》发送给:";
        super.sendMessage(message,toUser);
    }
}
/**
 * 普通信息
 */
public class NomalMessage extends AbstractMessage{
    public NomalMessage(IMessage message) {
        super(message);
    }

    public void sendMessage(String message, String toUser) {
        message = "[普通]" + message + "-》发送给:";
        super.sendMessage(message,toUser);
    }
}
public class Test {
    public static void main(String[] args) {
        IMessage message = new SmsMessage();
        AbstractMessage abstractMessage = new NomalMessage(message);
        abstractMessage.sendMessage("申请加班","王总");

        IMessage message2 = new EmailMessage();
        AbstractMessage abstractMessage2 = new UrgencyMessage(message2);
        abstractMessage2.sendMessage("申请加班","王总");

    }
}

JDBC桥接模式

image.png