What Is Bridge Mode?
The bridging pattern is to separate the abstract part from its implementation part so that they can all change independently. It is an object structure pattern, also known as Handle and Body pattern or Interfce pattern.
- In software systems, some types have changes in two or more dimensions due to their own logic, so how to deal with such "multi-dimensional changes"? How to use
- [GOF95] Proposing
- The following language codes are used to write the coordinates and radii of two different circles.
- API1.circle at 1: 2 7.5
- API2.circle at 5: 7 27.5
Java Bridge mode Java
/ ** "Implementor" * / interface DrawingAPI {public void drawCircle (double x, double y, double radius);} / ** "ConcreteImplementor" 1/2 * / class DrawingAPI1 implements DrawingAPI {public void drawCircle (double x, double y, double radius) {System.out.printf ("API1.circle at% f:% f radius% f \ n", x, y, radius);}} / ** "ConcreteImplementor" 2/2 * / class DrawingAPI2 implements DrawingAPI {public void drawCircle (double x, double y, double radius) {System.out.printf ("API2.circle at% f:% f radius% f \ n", x, y, radius);}} / ** "Abstraction" * / interface Shape {public void draw (); // low-level public void resizeByPercentage (double pct); // high-level} / ** "Refined Abstraction" * / class CircleShape implements Shape { private double x, y, radius; private DrawingAPI drawingAPI; public CircleShape (double x, double y, double radius, DrawingAPI drawingAPI) {this.x = x; this.y = y; this.radius = radius; this.dra wingAPI = drawingAPI;} // low-level ie Implementation specific public void draw () {drawingAPI.drawCircle (x, y, radius);} // high-level ie Abstraction specific public void resizeByPercentage (double pct) {radius * = pct;}} / ** "Client" * / class BridgePattern {public static void main (String [] args) {Shape [] shapes = new Shape [2]; shapes [0] = new CircleShape (1, 2, 3 , new DrawingAPI1 ()); shapes [1] = new CircleShape (5, 7, 11, new DrawingAPI2 ()); for (Shape shape: shapes) {shape.resizeByPercentage (2.5); shape.draw ();}} }
C# Bridge mode C #
using System; / ** "Implementor" * / interface IDrawingAPI {void DrawCircle (double x, double y, double radius);} / ** "ConcreteImplementor" 1/2 * / class DrawingAPI1: IDrawingAPI {public void DrawCircle (double x , double y, double radius) {System.Console.WriteLine ("API1.circle at {0}: {1} radius {2}", x, y, radius);}} / ** "ConcreteImplementor" 2/2 * / class DrawingAPI2: IDrawingAPI {public void DrawCircle (double x, double y, double radius) {System.Console.WriteLine ("API2.circle at {0}: {1} radius {2}", x, y, radius );}} / ** "Abstraction" * / interface IShape {void Draw (); // low-level (ie Implementation-specific) void ResizeByPercentage (double pct); // high-level (ie Abstraction-specific)} / ** "Refined Abstraction" * / class CircleShape: IShape {private double x, y, radius; private IDrawingAPI drawingAPI; public CircleShape (double x, double y, double radius, IDrawingAPI drawingAPI) { this.x = x; this.y = y; this.radius = radius; this.drawingAPI = drawingAPI;} // low-level (ie Implementation-specific) public void Draw () {drawingAPI.DrawCircle (x, y, radius);} // high-level (ie Abstraction-specific) public void ResizeByPercentage (double pct) {radius * = pct;}} / ** "Client" * / class BridgePattern {public static void Main (string [] args ) {IShape [] shapes = new IShape [2]; shapes [0] = new CircleShape (1, 2, 3, new DrawingAPI1 ()); shapes [1] = new CircleShape (5, 7, 11, new DrawingAPI2 ( )); foreach (IShape shape in shapes) {shape.ResizeByPercentage (2.5); shape.Draw ();}}}