桥接模式在23种设计模式中是属于 结构性 的模式
既然是结构性的,那么就要突显出在软件的设计结构中的优势
现在我们来假设一种情形,然后用代码来实现
情景:幼儿园的老师教小孩动物,动物中有猫,狗等,一个幼儿园有几个班,每个班有一个白板,老师教课的过程就是叫有动物的贴纸贴在白板上。
分析:老师作为控制台,动物贴纸由老师动手贴在白板上,黑板是死物,它不会知道贴在上面的是什么东西。这个过程就是实现在有多个黑板和多种贴纸的情形下,控制台对贴纸的操作。
过程:我们就直接从桥接模式开始,不要一步步引入了。贴纸是被动的东西,那就要设计一个贴纸的接口 Paster ,每种动物贴纸实现这个接口,来两种,猫和狗,CatPasterImpt和DogPasterImpt。 下来就是承接贴纸的白板,来个抽象类 Board ,两种白板 Board_1_Abs 和 Board_2_Abs。老师就是控制台了,Host类有mian方法。
Board 和Paster 是聚合的关系。
Paster 和实现这个接口类的代码
public interface Paster {
public void call();
}
public class CatPasterImpt implements Paster {
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("This is a Cat paster");
}
}
public class DogPasterImpt implements Paster{
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("This is a Dog paster");
}
}
Board 和继承它的类的代码
public abstract class Board {
public Paster paster;
public Board(Paster paster){
this.paster=paster;
}
public abstract void showPeople();
}
public class Board_1_Abs extends Board {
public Board_1_Abs(Paster paster) {
super(paster);
// TODO Auto-generated constructor stub
}
@Override
public void showPeople() {
// TODO Auto-generated method stub
System.out.print("this is board_1 now I will show you ");
paster.call();
}
}
public class Board_2_Abs extends Board {
public Board_2_Abs(Paster paster) {
super(paster);
// TODO Auto-generated constructor stub
}
@Override
public void showPeople() {
// TODO Auto-generated method stub
System.out.print("this is board_2 now I will show you ");
paster.call();
}
}
最后控制台的代码
public class Host {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Board board1_a=new Board_1_Abs(new CatPasterImpt());
board1_a.showPeople();//输出 this is board_1 now I will show you This is a Cat paster
Board board1_b=new Board_1_Abs(new DogPasterImpt());
board1_b.showPeople();//输出 this is board_1 now I will show you This is a Dog paster
Board board2_a=new Board_2_Abs(new CatPasterImpt());
board2_a.showPeople();//输出 this is board_2 now I will show you This is a Cat paster
Board board2_b=new Board_2_Abs(new DogPasterImpt());
board2_b.showPeople();//输出 this is board_2 now I will show you This is a Dog paster
}
}
这个设计模式的使用的情况就是有两种角色,这两种角色的个体有多种组合,并且作为承接作用的角色(白板)被承接的角色(贴纸)是完全没有选择的功能,选择权完全在调用承接作用的角色的控制台(老师)上。这样这两种角色就可以灵活组合,完全依照控制台的意志做组合,这样两种角色之间也算是耦合性不高了。