Bridge设计模式是一个非常有用的设计模式,也是比较复杂的设计模式,比较符合java中面向接口编程的思想,Bridge设计模式的主要作用就是将抽象和实现部分实现解耦。
为什么叫桥接模式,我的理解就是将抽象这部分放置到桥的一头,将实现部分放置到桥的另一头,任何一头发生什么改变,都不会影响另一边,其实在JDBC中就是采用了Bridge的思想,jdbc是sun公司定义的一套接口,不同的数据库公司分别对这套接口进行实现,这样就方便了用户的使用,如果不这样设计,那么使用不用的数据库就得编写不同的连接代码。
大家还记得Class.forName("com.mysql.jdbc.Driver"),这里的Driver就是实现部分的一个类,DriverManage就是抽象这边的类,两边发生关系就是通过这句代码实现
现在来举个例子来说明Bridge的使用,虽然可能有些不太贴切,但是比较好理解:
假设我现在成立了一家“山寨股份有限公司”,生产的产品就是当前市场非常赚钱的东西,现在假设Ipad非常容易赚钱,那么我就山寨Ipad,过段时间发现Iphone比较火,我就去山寨IPhone,那么我如何方便的切换生产过程:
下面使用代码来完成这一过程
定义一个定义抽象类Company:
public abstract class Company
{
//公司要生产的产品
private Product product;
public Product getProduct()
{
return product;
}
public void setProduct(Product product)
{
this.product = product;
}
public Company(Product product)
{
this.product=product;
}
public void produceProduct()
{
product.produceProduct();
}
public void sellProduct()
{
product.sellProduct();
}
}
定义另一个抽象类,Product:
public abstract class Product
{
//生成某一产品
public abstract void produceProduct();
//销售产品
public abstract void sellProduct();
}
好,到现在我就开始创建我的山寨公司ShangZaiCompany
public class ShangZaiCompany extends Company
{
public ShangZaiCompany(Product product)
{
super(product);
// TODO Auto-generated constructor stub
}
@Override
public void produceProduct()
{
// TODO Auto-generated method stub
super.produceProduct();
}
@Override
public void sellProduct()
{
// TODO Auto-generated method stub
super.sellProduct();
}
}
创建Ipad产品:
public class IPad extends Product
{
@Override
public void produceProduct()
{
// TODO Auto-generated method stub
System.out.println("生成IPad");
}
@Override
public void sellProduct()
{
// TODO Auto-generated method stub
System.out.println("销售IPad");
}
}
创建IPhone产品
public class Phone extends Product
{
@Override
public void produceProduct()
{
// TODO Auto-generated method stub
System.out.println("Phone生产中");
}
@Override
public void sellProduct()
{
// TODO Auto-generated method stub
System.out.println("Phone销售中");
}
}
测试一下:
public class Client
{
public static void main(String[] args)
{
//现在山寨公司要生产IPad
IPad pad=new IPad();
ShangZaiCompany com=new ShangZaiCompany(pad);
//公司开始运转了
com.produceProduct();
com.sellProduct();
//过段时间效益不太好,想生产手机
Phone phone=new Phone();
com.setProduct(phone);
//公司开始运转
com.produceProduct();
com.sellProduct();
}
}
在上面的几个类中,其中Company,ShangZaiCompany,属于抽象这边的,Product,IPad,Phone属于实现这边的