桥梁模式的用以是将问题的抽象和现实分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题,当系统中有两个可变的因素的时候,桥梁模式是我们应该考虑到的方式。
- 抽象化(Abstraction)角色 :给出抽象化定义并持有一个实现化对象的引用。
- 修正抽象化(Refined Abstraction)角色 :扩展抽象化角色,改变和修正父类对抽象化的定义。
- 实现化(Implementor)角色 :给出实现化的接口角色的接口,但不给出具体的实现。
- 具体实现化(Concrete Implementor)角色 :给出实现化角色接口的具体实现。
桥梁模式在于将抽象和实现分离(也就是我们常说的解耦),让抽象和实现能够独立变化。
package bridge;
/**
*
*描述:车的抽象类
*/
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;
/**
*
*描述:汽车的实现类
*/
public class Car extends Vehicle {
@Override
public void transport() {
System.out.print("汽车");
super.transport();
}
}
package bridge;
/**
*
*描述:火车的实现类
*/
public class Train extends Vehicle {
@Override
public void transport() {
System.out.print("火车");
super.transport();
}
}
package bridge;
/**
*
*描述:车的实现接口
*/
public interface Transport {
/**
*
*描述:运输
*/
public void transport();
}
package bridge;
/**
*
*描述:货车
*/
public class Goods implements Transport{
@Override
public void transport() {
System.out.println("运货");
}
}
package bridge;
/**
*
*描述:客车
*/
public class Guest implements Transport{
@Override
public void transport() {
System.out.println("运客");
}
}
package bridge;
/**
*
*描述:测试类
*/
public class Client {
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、提高可扩充性,使扩展变得简单;
以上原文地址:http://alaric.iteye.com/blog/1918381?utm_source=tuicool
另外cbf4life的《设计模式之禅》很不错,讲的很通俗易懂。很喜欢。