介绍
桥接模式(Bridge Pattern)属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
优点
- 抽象和实现的分离
- 优秀的扩展能力
- 实现细节对客户透明
缺点
- 桥接模式的引入会增加系统的理解与设计难度,聚合关联关系建立在抽象层,要求开发者针对抽象设计和编程
应用
有多种可能会变化的情况下,不适用或者不想用类继承时
实现
关键代码:抽象类依赖实现类
// 抽象类,定义杯子大小
abstract class Abstraction {
private Implementor mImplementor;
public Abstraction(Implementor implementor) {
mImplementor = implementor;
}
public Implementor getImplementor() {
return mImplementor;
}
public abstract void operator();
}
class RefineAbstraction1 extends Abstraction {
public RefineAbstraction1(Implementor implementor) {
super(implementor);
}
@Override
public void operator() {
System.out.println("大杯的" + this.getImplementor().implement() + "咖啡");
}
}
class RefineAbstraction2 extends Abstraction {
public RefineAbstraction2(Implementor implementor) {
super(implementor);
}
@Override
public void operator() {
System.out.println("小杯的" + this.getImplementor().implement() + "咖啡");
}
}
//实现的接口
interface Implementor {
String implement();
}
class ConcreteImplementor1 implements Implementor {
@Override
public String implement() {
return "加糖";
}
}
class ConcreteImplementor2 implements Implementor {
@Override
public String implement() {
return "不加糖";
}
}
class Client {
public static void main(String[] args) {
Implementor i1 = new ConcreteImplementor1();//加糖
Implementor i2 = new ConcreteImplementor1();//不加糖
Abstraction a1 = new RefineAbstraction1(i1);//大杯、加糖
Abstraction a2 = new RefineAbstraction1(i2);//大杯、不加糖
Abstraction a3 = new RefineAbstraction2(i1);//小杯、加糖
Abstraction a4 = new RefineAbstraction2(i2);//小杯、不加糖
a1.operator();
a2.operator();
a3.operator();
a4.operator();
}
}
运行结果:
大杯的加糖咖啡
大杯的加糖咖啡
小杯的加糖咖啡
小杯的加糖咖啡