将形象和具体实现拆散,通过抽象类来关联其具体实现,缩小类之间的耦合。
上面通过一个车厂和汽车品牌的实例来实现桥接模式
汽车品牌的形象 接口 外面申明一个获取汽车品牌的办法
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的具体实现类。