设计模式之Bridge

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属于实现这边的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值