上一篇:适配器模式
1.什么是桥接模式?
桥接模式也称为柄体模式或者接口模式,它是将抽象部分和它的实现部分进行分离解耦,并且使得他们二者可以独立的变化。下图是一种典型的继承方式转换为桥接模式的案例图:
如果说上面的图片看不懂,那再举个栗子:
人大体可以分为两部分:灵魂(抽象部分) 和 肉体(具体实现),孙悟空的灵魂是一个猴子,但是肉体却是人形。这和桥接模式的基本理念是一致的(抽象部分和实现部分分离解耦,并使得二者可以独立变化,不同的灵魂和不同的肉体进行组合可以实现不同的实体对象)。
2.桥接模式的优缺点?
1.优点:
1)抽象部分与具体实现分离
2)具有良好的可扩展性
2.缺点:
1)此模式会导致项目结构的复杂度增加
3.代码实现桥接模式?
下面用代码实现一个桥接模式的案例:
我们以天使小狗和魔鬼蝙蝠两种生物为例:
1.创建灵魂接口
/**
* 灵魂接口(灵魂可以是魔鬼、天使)
*/
public interface Soul {
/**
* 打印灵魂名称
*/
void name();
}
2.创建魔鬼类型灵魂
/**
* 魔鬼
*/
public class Devil implements Soul {
@Override
public void name() {
System.out.print("魔鬼");
}
}
3.创建天使类型灵魂
/**
* 天使
*/
public class Angel implements Soul {
@Override
public void name() {
System.out.print("天使");
}
}
4.创建生物类
/**
* 抽象的生物类
*/
public abstract class Biological {
/**
*生物具有灵魂属性
*/
protected Soul soul;
public Biological(Soul soul) {
this.soul = soul;
}
public void info(){
//打印灵魂的名称
soul.name();
}
}
5.创建具体的生物类—小狗
/**
* 小狗类
*/
public class Dog extends Biological{
public Dog(Soul soul) {
super(soul);
}
//重写打印灵魂的方法(ctrl + O)
@Override
public void info() {
super.info();
System.out.println("小狗");
}
}
6.创建具体的生物—蝙蝠类
/**
* 蝙蝠类
*/
public class Bat extends Biological {
public Bat(Soul soul) {
super(soul);
}
@Override
public void info() {
super.info();
System.out.println("蝙蝠");
}
}
7.测试类
注意:我们在给具体的生物赋予灵魂的时候直接new一个具体的灵魂给生物就ok了
public class Test {
public static void main(String[] args) {
Biological biological =new Dog(new Angel());
biological.info();
Biological biological2 = new Bat(new Devil());
biological2.info();
}
}
在测试类中,我们给小狗这种生物new了一个天使灵魂,给蝙蝠这种生物new了一个魔鬼灵魂
8.测试结果
当我们将生物分解为灵魂和肉体两部分的时候,无论是我们需要增加这两部分中的任何一种,都不会影响到另外一部分。比如我们需要增加具体实现小猫、小兔子,灵魂部分我们不需要做任何修改。而且我们可以通过不同的灵魂和不同的肉体进行任意组合,实现生物的“多样性”……比如我们熟知的天蓬元帅就是灵魂和肉体组合太随意造就的……