设计模式之Bridge

来源:互联网 发布:乐乐体育淘宝 编辑:程序博客网 时间:2024/06/05 10:03

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}@Overridepublic void produceProduct(){// TODO Auto-generated method stubsuper.produceProduct();}@Overridepublic void sellProduct(){// TODO Auto-generated method stubsuper.sellProduct();}}

 

创建Ipad产品:

public class IPad extends Product{@Overridepublic void produceProduct(){// TODO Auto-generated method stubSystem.out.println("生成IPad");}@Overridepublic void sellProduct(){// TODO Auto-generated method stubSystem.out.println("销售IPad");}}


创建IPhone产品

public class Phone extends Product{@Overridepublic void produceProduct(){// TODO Auto-generated method stubSystem.out.println("Phone生产中");}@Overridepublic void sellProduct(){// TODO Auto-generated method stubSystem.out.println("Phone销售中");}}

测试一下:

public class Client{public static void main(String[] args){//现在山寨公司要生产IPadIPad 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属于实现这边的