今天我来说一下桥接模式,桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。
听起来这个概念是十分难懂的,那么我来解释一下。如果一个类,也就是一个实物。它具有很多类的属性,按照属性所属类型的不同,可以实例化很多的对象,那么在类的声明时就会显得十分复杂难做。举一个例子,我们都知道电脑有很多种类型,比如笔记本电脑,台式电脑以及现在比较多掌上电脑。同时笔记本电脑的品牌有很多,比如联想,Dell,惠普等等。如果我们要声明这些类,就需要声明诸多的类,那么如果我需要声明一个新的品牌,在声明一个新的品牌的同时,我还需要声明这个品牌的电脑机型,这样维护起来就会很复杂。
那么我们可以找寻一个解决的方式,将商标作为属性注入到机型类中,让机型类可以自由的选择商标。
来看一下代码
public class Computer2 {
protected Brand brand;
public Computer2(Brand b) {
this.brand = b;
}
public void sale(){
brand.sale();
}
}
class Desktop2 extends Computer2 {
public Desktop2(Brand b) {
super(b);
}
@Override
public void sale() {
super.sale();
System.out.println("销售台式机");
}
}
class Laptop2 extends Computer2 {
public Laptop2(Brand b) {
super(b);
}
@Override
public void sale() {
super.sale();
System.out.println("销售笔记本");
}
}
public interface Brand {
void sale();
}
class Lenovo implements Brand {
@Override
public void sale() {
System.out.println("销售联想电脑");
}
}
class Dell implements Brand {
@Override
public void sale() {
System.out.println("销售Dell电脑");
}
}
class Shenzhou implements Brand {
@Override
public void sale() {
System.out.println("销售神舟电脑");
}
}
这两个类是一种嵌套关系。在调用的时候只需要将相应的品牌注入到机型里面即可。
public class Client {
public static void main(String[] args) {
//销售联想的笔记本电脑
Computer2 c = new Laptop2(new Lenovo());
c.sale();
//销售神舟的台式机
Computer2 c2 = new Desktop2(new Shenzhou());
c2.sale();
}
}