设计模式解析:桥接模式

桥接模式核心要点:

处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。系统可能有多个角度分类,每一种角度都可能变化。在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。 使用桥接模式能把这种多角度分类的实现类分离出来,让它们独立变化,减少它们之间耦合;同时,抽象和实现之间可以独立扩展,不会影响到彼此,也将实现部分与抽象部分分离,使它们都可以独立的变化。

代码示例:

在这里,为了达到通俗易懂的演示效果,将采用生活的案例作为演示。比如我们需要定义一些电脑类,这些类有两个维度:1.品牌,如联系、惠普;2.种类,如手提电脑、台式机。显而易见,采用继承的方式可以实现这个需求,但是会形成一个类似于树形的继承关系,使类与类之间的关系较为繁杂且耦合度高,那么我们可以采用桥接模式的方式来实现这个需求:

首先定义电脑品牌相关的接口和类:

/**
 * 品牌
 * @author Administrator
 *
 */
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("销售神舟电脑");
	}
	
}

然后定义电脑的类型:

/**
 * 电脑类型的维度
 * @author Administrator
 *
 */
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("销售笔记本");
	}
}

可见电脑的父类是持有着品牌接口的引用的,也就意味着只要继承了电脑父类,就通过构造方法能持有品牌接口的引用。

接下来编写mian方法进行调用:

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();			
	}
}

运行结果:

销售联想电脑
销售笔记本
销售神舟电脑
销售台式机

这样就能通过持有接口引用的方式进行电脑和品牌的桥接,桥接模式提供了系统的可扩展性,在电脑品牌和种类这两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则,就像一座桥将两岸连接起来,各个岸上都可以独立的变化。

应用实例:

JDBC驱动程序



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值