系列文章:定义 将抽象部分与实现部分分离,使它们都可以独立的变化。 结构 示例 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 ” ©著作权归作者所有 |