问题提出

生活中有很多事物集合,设为A1A2......Am ,而每个事物都有功能F1F2....Fn.

例如邮局的发送业务。简单模拟有两类事物:信件和包裹,均有平邮和挂号邮寄功能。程序设计中如何来描述这些功能呢?或许一般会与下面代码相似。

public class A1 {
    void F1(){}
    void F2(){}
}
public class A2 {
    void F1(){}
    void F2(){}
}

很明显,若有m个事物,n个功能,按照这个方法,一共要写m个类,功能方法累积起来有m*n个。这样明显不太可取。那么为了更好地解决上面的问题,桥接模式就是一种重要的方法之一。

桥接模式是关于怎样将抽象部分与它的实现部分相分离,使它们都可以独立地变化的成熟模式。上面的方法的根本缺陷就是在具体类中封装了F1()或是F2()方法。因此必定会有重复的代码。解决这个问题的重要策略就是利用“语义”,通过接口或者抽象类进行抽象。

对面上面的例子,可以描述为:

1)邮局有发送功能;发送功能有两种方式,平邮和挂号。

public interface IPost {    // 邮局
    public void post();     //发送功能
}
public class SimplePost implements IPost {      //平信发送
    public void post(){
        System.out.println("This is simplePost");
    }
}

public class MarkPost implements IPost {        //挂号发送
    public void post(){
        System.out.println("This is Mark post");
    }
}

View Code