定义
桥接模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的 功能扩展,属于结构型设计模式的一种
作用和应用场景
桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。对于那些不希望使用继承或多层次继承导致子类数量过多的系统,桥接模式极为适用。
桥接模式要求正确识别出系统中两个独立变化的维度(抽象、和实现),因此其使用范围有一定的局限性,即需要有这样的应用场景,常见的应用场景有银行转账系统,转账的方式多样(网上转账,银行转账,ATM转账),转账的客户类型多样(普通,银卡,金卡,VIP)。
演示
/**
* 桥接模式
*/
public interface Bridge {
void open();
void call();
void close();
}
class XiaoMi implements Bridge {
@Override
public void open() {
System.out.println("欢迎使用小米手机");
}
@Override
public void call() {
}
@Override
public void close() {
}
}
class HuaWei implements Bridge{
@Override
public void open() {
System.out.println("欢迎使用华为手机");
}
@Override
public void call() {
}
@Override
public void close() {
}
}
abstract class Mobile{
private Bridge bridge;
public Mobile(Bridge bridge){
this.bridge = bridge;
}
public void open(){
bridge.open();
}
public void call(){
bridge.call();
}
public void close(){
bridge.close();
}
}
class UpRightPhone extends Mobile{
public UpRightPhone(Bridge bridge) {
super(bridge);
}
public void open(){
super.open();
}
public void call(){
super.call();
}
public void close(){
super.close();
}
}
class TestBridgePattern{
public static void main(String[] args) {
Mobile xiaoMi = new UpRightPhone(new XiaoMi());
Mobile huaWei = new UpRightPhone(new HuaWei());
xiaoMi.open();
huaWei.open();
}
}