抽出されたクラスと実装を分離して、それらを独立に変更できるようにする。

クラス Abstraction へのメソッド追加および抽象クラス Implementor へのアブストラクトメソッド追加により、あとからオペレーションを追加できる。
あらかじめ予想されていなかったオペレーションを追加することが可能になる。すべての ConcreteImplementor クラスに、追加されたオペレーションを実装する補完モジュールが必要になる。
xxx
Bridge パターンが目的とする状況は Abstraction と Implementation を独立して選択できる場合である。
| Implementation | ||||
| X Window System | Presentation Manager | ‥ | ||
| Abstraction | icon | |||
| transient | ||||
| : | ||||
この独立性を実現するために、Bridge パターンでは Abstraction と Implementation のふたつのクラス階層を使う。しかし、MixJuice では、Implementation の拡張を差分によって実現することにより、ひとつのクラス階層で同様な拡張性を実現できる。
ひとつのバイナリでひとつの Implementation しか使用しないのであれば、 MixJuice ではクラス階層をひとつで済ますことができる。

module original {
define class Abstraction {
define void operation() {
... implementationOperation1(); ...
}
define abstract void implementationOperation1();
define abstract void implementationOperation2();
}
define class RefinedAbstractionA extends Abstraction {...}
define class RefinedAbstractionB extends Abstraction {...}
}
module implementation1 extends original {
class Abstraction {
void implementationOperation1() {...}
void implementationOperation2() {...}
}
}
module implementation2 extends original {
class Abstraction {
void implementationOperation1() {...}
void implementationOperation2() {...}
}
}

module window {
define class Window {
define void drawRect() {
drawLine();
drawLine();
drawLine();
drawLine();
}
define abstract void drawText();
define abstract void drawLine();
}
define class IconWindow extends Window {...}
define class TransientWindow extends Window {...}
}
module window.implementation.x extends window {
class Window {
void drawText() {... XDrawString(); ...}
void drawLine() {... XDrawLine(); ...}
}
}
module window.implementation.pm extends window {
class Window {
void drawText() {...}
void drawLine() {...}
}
}