动机
桥接(BRIDGE)模式 也叫HANDLE/BODY模式,属于对象结构型模式。将抽象部分与实现部分分离,使他们都可以独立的变化。(摘自《GoF设计模式》)
个人见解
我理解的桥接模式就是把存在继承关系的结构中的变化的部分进行封装传入。
UML结构图:
场景模拟:今天学什么?
小明是一个爱学习的孩子,他学习的过程都是一样的,到桌子前,打开台灯,戴上耳机,选择一本书,阅读。
除了选择的书不一样,其他的都和昨天一样,老时间老地点还是这个人。
很明显小明不是北漂。:]
代码实现
1.学习基类,即Abstraction:
public abstract class StudyWhat {
protected Subject subject;
// 需要传入学习的科目
public StudyWhat(Subject subject) {
this.subject = subject;
}
public abstract void study();
}
2.具体的学习实现,即RefinedAbstraction:
public class ConcreteStudy extends StudyWhat {
public ConcreteStudy(Subject subject) {
super(subject);
}
@Override
public void study() {
System.out.println("到桌子前,打开台灯,戴上耳机,准备阅读:" + subject.getName());
}
}
3.科目抽象,即Implementor:
public interface Subject {
public String getName();
}
4.科目实现,即:ConcreateImplementorA和ConcreateImplementorB:
public class JvmSubject implements Subject {
@Override
public String getName() {
return "《深入理解Java虚拟机》";
}
}
public class TcpIp1Subject implements Subject {
@Override
public String getName() {
return "《TCP/IP详解卷1》";
}
}
5.调用,即Client:
public class Run {
public static void main(String[] args) {
StudyWhat studyWhat = new ConcreteStudy(new JvmSubject());
studyWhat.study();
studyWhat = new ConcreteStudy(new TcpIp1Subject());
studyWhat.study();
}
}