桥梁模式/Bridge

桥梁模式/Bridge

意图/适用场景:

桥梁模式的意图在于把“抽象”与“实现”解耦合,把强关联转变为弱关联。

所谓强关联,就是在编译时期已经确定的,无法在运行时期改变的关联;所谓弱关联,就是可以动态地确定并且可以在运行时期动态地改变的关联。显然,在Java语言中,继承关系是强关联,而聚合关系是弱关联。

将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改为弱关联。因此,桥梁模式中的所谓解耦合,就是指在一个软件系统的抽象化和实现化之间使用聚合关系而不是继承关系,从而使两者都可以相对独立地变化。

UML:

桥梁模式/Bridge

参与者:

  1. 抽象化角色(Abstraction):抽象化给出的定义,并保存一个对实现化对象的引用。
  2. 修正抽象化角色(RefinedAbstraction):扩展抽象化角色,改变和修正父类对抽象化的定义。
  3. 实现化角色(Implementor):实现类的接口,定义实现类的方法。这些方法与抽象化角色所提供的方法不需要相同,甚至可以完全不同。
  4. 具体实现化角色(ConcreteImplementor):实现化角色的具体实现类。

要点:

桥梁模式的系统中有两个等级结构:

  1. 由抽象化角色和修正抽象化角色组成的抽象化等级结构。
  2. 由实现化角色和具体实现化角色所组成的实现化等级结构。

抽象化等级结构是提供给用户或者系统其它部分使用的,是稳定不易变的;而实现化等级结构是可以替换的,比如在不同的环境中,使用不同的实现化,这也正是解耦合的目标。

应用实例:

AWT的Peer架构
Java语言具有跨平台的功能。相同的代码使用AWT库绘制的界面,在不同的操作系统上功能相同,但外观风格不同。这里就应用了桥梁模式,把Java的AWT调用与操作系统native调用有效地解耦合。 在AWT库中的每一个Component的子类都有一个ComponentPeer的子类与之匹配。所有的Component的子类都属于一个等级结构,即抽象化等级结构;而所有的ComponentPeer的子类都属于另一个等级结构,即实现化等级结构。Component类型和ComponentPeer类型通过Toolkit对象相互通信。

桥梁模式/Bridge

示例代码:

[java]
// Source code from file:  Abstraction.java

package designPatterns.Bridge;

public class Abstraction {
protected Implementor imp;

public void operation() {
imp.operationImp();
}
}

// Source code from file:  ConcreteImplementorA.java

package designPatterns.Bridge;

public class ConcreteImplementorA implements Implementor {
public void operationImp() {
System.out.println("ConcreteImplementorA.operationImp()");
}
}

// Source code from file:  ConcreteImplementorB.java

package designPatterns.Bridge;

public class ConcreteImplementorB implements Implementor {
public void operationImp() {
System.out.println("ConcreteImplementorB.operationImp()");
}
}

// Source code from file:  Implementor.java

package designPatterns.Bridge;

public interface Implementor {
public void operationImp();
}

// Source code from file:  RefinedAbstraction.java

package designPatterns.Bridge;

public class RefinedAbstraction extends Abstraction {

public RefinedAbstraction(String systemType) {
if (systemType.equals("SystemA"))
imp = new ConcreteImplementorA();
else if (systemType.equals("SystemB"))
imp = new ConcreteImplementorB();
}

public void operation() {
// do some thing
super.operation();
}
}

// Source code from file:  User.java

package designPatterns.Bridge;

public class User {
public static void main(String[] args) {
Abstraction absA = new RefinedAbstraction("SystemA");
absA.operation();
Abstraction absB = new RefinedAbstraction("SystemB");
absB.operation();
}
}
[/java]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
桥梁模式Bridge)是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。这种模式通过委托的方式将两个层次结构连接起来,从而减少它们之间的耦合度。 在C#中实现桥梁模式,首先需要定义抽象部分和实现部分的接口或抽象类。然后在抽象部分中持有一个指向实现部分的引用,并通过该引用将实现部分的具体实现委托给实现部分。 下面是一个简单的示例代码: ```csharp // 实现部分的接口 interface IImplementor { void OperationImpl(); } // 具体实现部分A class ConcreteImplementorA : IImplementor { public void OperationImpl() { Console.WriteLine("Concrete Implementor A"); } } // 具体实现部分B class ConcreteImplementorB : IImplementor { public void OperationImpl() { Console.WriteLine("Concrete Implementor B"); } } // 抽象部分的接口 interface Abstraction { void Operation(); } // 具体抽象部分 class RefinedAbstraction : Abstraction { private IImplementor implementor; public RefinedAbstraction(IImplementor implementor) { this.implementor = implementor; } public void Operation() { implementor.OperationImpl(); } } // 使用示例 class Program { static void Main(string[] args) { IImplementor implementorA = new ConcreteImplementorA(); Abstraction abstractionA = new RefinedAbstraction(implementorA); abstractionA.Operation(); // Output: Concrete Implementor A IImplementor implementorB = new ConcreteImplementorB(); Abstraction abstractionB = new RefinedAbstraction(implementorB); abstractionB.Operation(); // Output: Concrete Implementor B } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值