桥接模式定义
桥接模式也称为桥梁模式、接口模式或柄体模式,是将抽象部分与它的具体实现部分分离,使他们都可以独立地变化,通过组合的方式建立两个类之间的联系,而不是用继承,属于结构性模式。
- 抽象维度和实现维度
优点
- 分离抽象部分及其具体实现部分
- 提高了系统的扩展性
- 符合开闭原则
- 符合合成复用原则
例子1
1、桥接模式之前
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
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
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、桥接模式之后
/**
* 发送消息顶层接口
*/
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("申请加班","王总");
}
}