将抽象和具体实现分离,通过抽象类来关联其具体实现,减少类之间的耦合。
下面通过一个车厂和汽车品牌的实例来实现桥接模式
汽车品牌的抽象 接口 里面声明一个获取汽车品牌的方法
public interface Brand {
String brandName();
}
车厂抽象类 其中会组合汽车品牌的抽象 里面声明一个输出汽车信息的抽象方法
public abstract class Depot {
Brand brand;
public void setBrand(Brand brand) {
this.brand = brand;
}
public abstract void message();
}
汽车品牌的具体实现,我们增加丰田、福特两个品牌
public class Toyota implements Brand{
private final String name = "丰田";
@Override
public String brandName() {
return name;
}
}
public class Ford implements Brand{
private final String name = "福特";
@Override
public String brandName() {
return name;
}
}
汽车厂的两个具体实现,增加一汽、上汽两个车厂类
public class FAWDepot extends Depot{
@Override
public void message() {
System.out.println("一汽汽车厂生产的"+super.brand.brandName());
}
}
public class SAICDepot extends Depot{
@Override
public void message() {
System.out.println("上汽汽车厂生产的"+super.brand.brandName());
}
}
测试类
public class BridgeTest {
@Test
public void test(){
Depot faw = new FAWDepot();
faw.setBrand(new Ford());
faw.message();
Depot saic = new SAICDepot();
saic.setBrand(new Toyota());
saic.message();
}
}
====结果====
一汽汽车厂生产的福特
上汽汽车厂生产的丰田
我们可以上面的实现中发现,只有在Depot中引用了Brand,这两个类(接口)都是抽象层面的实现,没有具体到某一车厂和具体品牌,然后就可以在客户端中通过两个抽象类建立的“桥”去组合,Depot的具体实现类和Brand的具体实现类。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。