Bridge 设计模式
您目前处于:编程  2015年08月18日

定义

将抽象部分与实现部分分离,使它们都可以独立的变化。

结构

示例

Implementor:定义实现接口

interface Implementor {
    // 实现抽象部分需要的某些具体功能
    public void operationImpl();
}

Abstraction:定义抽象接口

abstract class Abstraction {
    // 持有一个 Implementor 对象,形成聚合关系
    protected Implementor impl;

    public Abstraction(Implementor impl) {
        this.impl = impl;
    }

    // 可能需要转调实现部分的具体实现
    public void operation() {
        impl.operationImpl();
    }
}

ConcreteImplementor:实现 Implementor 中定义的接口

class ConcreteImplementorA implements Implementor {
    @Override
    public void operationImpl() {
        // 真正的实现
        System.out.println("具体的实现A");
    }
}

class ConcreteImplementorB implements Implementor {
    @Override
    public void operationImpl() {
        // 真正的实现
        System.out.println("具体的实现B");
    }
}

RefinedAbstraction:扩展 Abstraction 类

class RefinedAbstraction extends Abstraction {

    public RefinedAbstraction(Implementor impl) {
        super(impl);
    }

    public void otherOperation() {
        // 实现一定的功能,可能会使用具体实现部分的实现方法,
        // 但是本方法更大的可能是使用 Abstraction 中定义的方法
        // 通过组合使用 Abstraction  中定义的方法来完成更多的功能。
    }
}

测试代码

public class BridgePattern {
    public static void main(String[] args) {
        Implementor impl = new ConcreteImplementorA();
        RefinedAbstraction abs = new RefinedAbstraction(impl);
        abs.operation();
        abs.otherOpertaion();
    }
}

样例

实现部分定义接口

interface MessageImplementor {
    // 发送消息
    public void send(String message);
}

抽象部分定义接口

public abstract class AbstractMessage {
    // 持有一个实现部分的对象
    protected MessageImplementor impl;
    // 构造方法,传入实现部分的对象
    public AbstractMessage(MessageImplementor impl) {
        this.impl = impl;
    }
    // 发送消息,转调实现部分的方法
    public void sendMessage(String message) {
        this.impl.send(message);
    }
}

具体的实现发送消息

public class MessageSMS implements MessageImplementor {
    public void send(String message) {
        System.out.prinlt("使用短信方式发送消息:" + message);
    }
}

public class MessageEmail implements MessageImplementor {
    public void send(String message) {
        System.out.println("使用Email方法发送消息:" + message);
    }
}

抽象的消息消息

public class CommonMessage extends AbstractMessage {

    public CommonMessage(MessageImplementor impl) {
        super(impl);
    }

    public void sendMessage(Stirng message) {
        super.sendMessage(message);
    }
}

public class UrgencyMessage extends AbstractMessage {

    public UrgencyMessage (MessageImplementor impl) {
        super(impl);
    }

    public void sendMessage(Stirng message) {
        super.sendMessage(message);
    }
}

转载请并标注: “本文转载自 linkedkeeper.com ”