JAVA设计模式学习16——桥梁模式

阅读更多

桥梁(Bridge)模式:又称Handle/Body。将抽象部分和实现部分分离,使它们都可以独立的变化。桥梁模式属于对象的结构模式。

GOF桥梁模式的示意性结构类图如下:

JAVA设计模式学习16——桥梁模式_第1张图片
通过上图可以看出桥梁模式有以下角色:

抽象化(Abstraction)角色:给出抽象化定义并持有一个实现化对象的引用。

修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。

实现化(Implementor)角色:给出实现化的接口角色的接口,但不给出具体的实现。

具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

 

桥梁模式在于将抽象和实现分离(也就是我们常说的解耦),让抽象和实现能够独立变化。来举个例子:抽象的车,有火车和汽车,而火车有客车和火车,也就是能运货物和人;汽车也是如此,能运货物和运客人。我们可以如下建立模型:
JAVA设计模式学习16——桥梁模式_第2张图片 
这种模式将车的属性和行为分类,让车 和运输相互独立演变,类的数量由原来的M*N变成M+N的数量,利用组合方式代替继承,这也符合‘组合聚合复用原则’,组合聚合复用原则讲的是要尽可能使用组合、聚合来达到复用目的而不是利用继承。对于增加一个运输方式或者增加一个车的种类,直接添加即可,不必修改其他类,也只需修改一处即可。
上述描述代码如下:

 

JAVA设计模式学习16——桥梁模式_第3张图片
这种模式将车的属性和行为分类,让车 和运输相互独立演变,类的数量由原来的M*N变成M+N的数量,利用组合方式代替继承,这也符合‘组合聚合复用原则’,组合聚合复用原则讲的是要尽可能使用组合、聚合来达到复用目的而不是利用继承。对于增加一个运输方式或者增加一个车的种类,直接添加即可,不必修改其他类,也只需修改一处即可。上述描述代码如下:
package bridge;
/**
 * 
 *作者:alaric
 *时间:2013-8-2上午7:41:31
 *描述:车的抽象类
 */
public abstract class Vehicle {

	private Transport implementor;
	
	public void transport(){
		implementor.transport();
	}
	public Transport getImplementor() {
		return implementor;
	}
	public void setImplementor(Transport implementor) {
		this.implementor = implementor;
	}
	
}
 
package bridge;
/**
 * 
 *作者:alaric
 *时间:2013-8-2上午7:45:40
 *描述:汽车的实现类
 */
public class Car extends Vehicle {

	@Override
	public void transport() {

		System.out.print("汽车");
		super.transport();
	}

}
 
package bridge;
/**
 * 
 *作者:alaric
 *时间:2013-8-2上午7:45:58
 *描述:火车的实现类
 */
public class Train extends Vehicle {

	@Override
	public void transport() {

		System.out.print("火车");
		super.transport();
	}

}
 
package bridge;
/**
 * 
 *作者:alaric
 *时间:2013-8-2上午7:46:17
 *描述:车的实现接口
 */
public interface Transport {

	/**
	 * 
	 *作者:alaric
	 *时间:2013-8-2上午7:46:38
	 *描述:运输
	 */
	public void transport();
	
}
 
package bridge;
/**
 * 
 *作者:alaric
 *时间:2013-8-2上午7:41:00
 *描述:货车
 */
public class Goods implements Transport{

	@Override
	public void transport() {
		
		System.out.println("运货");
	}

}
 
package bridge;
/**
 * 
 *作者:alaric
 *时间:2013-8-1下午10:58:25
 *描述:客车
 */
public class Guest implements Transport{

	@Override
	public void transport() {

		System.out.println("运客");
	
	}

}
 
package bridge;
/**
 * 
 *作者:alaric
 *时间:2013-8-2上午7:45:24
 *描述:测试类
 */
public class Client {

	/**
	 *作者:alaric
	 *时间:2013-8-2上午7:45:16
	 *描述:
	 */
	public static void main(String[] args) {
		//造出一辆火车来
		Train train = new Train();
		//装入货物
		train.setImplementor(new Goods());
		//运输
		train.transport();
		//上客
		train.setImplementor(new Guest());
		//运输
		train.transport();
		
		
		//造出一汽车来
		Car car = new Car();
		//装入货物
		car.setImplementor(new Goods());
		//运输
		car.transport();
		//上客
		car.setImplementor(new Guest());
		//运输
		car.transport();
		

	}

}
运行结果如下:
火车运货
火车运客
汽车运货
汽车运客
通过上面代码可以看出,桥梁模式有如下优点:
1、分离接口及实现部分  一个实现不必一直绑定在一个接口上;
2、提高可扩充性,使扩展变得简单;
 

设计模式系列目录:

JAVA设计模式学习1——统一建模语言UML

JAVA设计模式学习2——面向对象设计原则

JAVA设计模式学习3——设计模式概述

JAVA设计模式学习4——简单工厂模式

JAVA设计模式学习5——工厂方法模式

JAVA设计模式学习6——抽象工厂模式

JAVA设计模式学习7——单例模式

JAVA设计模式学习8——建造模式

JAVA设计模式学习9——原型模式

JAVA设计模式学习10——组合模式

JAVA设计模式学习11——适配器模式

JAVA设计模式学习12——装饰器模式

JAVA设计模式学习13——代理模式

JAVA设计模式学习14——享元模式

JAVA设计模式学习15——门面模式

JAVA设计模式学习16——桥梁模式

JAVA设计模式学习17——策略模式

JAVA设计模式学习18——模版方法模式

JAVA设计模式学习19——观察者模式

JAVA设计模式学习20——责任链模式

JAVA设计模式学习21——命令模式

JAVA设计模式学习22——备忘录模式

JAVA设计模式学习23——状态模式

JAVA设计模式学习24——访问者模式

JAVA设计模式学习25——迭代器模式

  • JAVA设计模式学习16——桥梁模式_第4张图片
  • 大小: 15 KB
  • JAVA设计模式学习16——桥梁模式_第5张图片
  • 大小: 13.8 KB
  • JAVA设计模式学习16——桥梁模式_第6张图片
  • 大小: 13.7 KB
  • 查看图片附件

你可能感兴趣的:(桥梁模式,桥模式)