今天总结结构型模式的第三种模式,桥接模式(Bridge模式)。
定义
将抽象与实现分离,使他们可以独立变化,它利用抽象类和接口组合的方式来替代继承关系,从而降低了抽象和实现这两个可变维度的耦合度。
结构
- 抽象化角色 : 定义一个抽象类,并包含一个实现化对象的引用。
- 扩展抽象化角色 : 是抽象化角色的字类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
- 实现化 : 定义实现化角色的接口,供拓展抽象化角色调用
- 具体实现化 : 给出实现化接口的具体实现。
代码示例
public class MyBridgeTest {
public static void main(String[] args){
ConcreteImplementorA concreteImplementorA = new ConcreteImplementorA();
Abstraction refinedAbstraction = new RefinedAbstraction(concreteImplementorA);
refinedAbstraction.Operation();
}
/**
* 实现化角色
*/
interface Implementor{
void OperationImpl();
}
/**
* 具体实例化角色
*/
static class ConcreteImplementorA implements Implementor{
@Override
public void OperationImpl() {
System.out.println("具体实例化(ConcreteImplementorA)角色被访问");
}
}
/**
* 抽象化角色
*/
static abstract class Abstraction{
protected Implementor implementor;
protected Abstraction(Implementor implementor){
this.implementor = implementor ;
}
public abstract void Operation();
}
/**
* 扩展抽象化角色
*/
static class RefinedAbstraction extends Abstraction
{
protected RefinedAbstraction(Implementor implementor)
{
super(implementor);
}
public void Operation()
{
System.out.println("扩展抽象化(Refined Abstraction)角色被访问" );
implementor.OperationImpl();
}
}
}
打印结果如下
扩展抽象化(Refined Abstraction)角色被访问
具体实例化(ConcreteImplementorA)角色被访问
简单梳理一下实现原理
- 第一步:定义一个实现化角色,它是一个接口,声明具体实现角色所需要实现的方法。
- 第二步:定义一个具体实现的类,它负责具体实现
- 第三步:定义一个抽象化角色,也就是一个抽象类,它包含一个具体实现类的引用和一个实现具体业务的抽象方法。
- 第四步:定义一个扩展实现类,它继承自抽象这个抽象类,并在其实现真正业务的抽象业务里实现父类的方法,做具体的业务。
优缺点
- 优点 : 抽象与实现相分离,我们可以根据需求进行扩展;实现的细节对客户透明
- 缺点:由于实现的聚合关系都依赖于抽象层,因此在设计时对设计人员的技术要求比较高。
今天的桥接模式就总结到这里,觉得对您有帮助记得点个赞~
网友评论