From harness-claude
Implements JavaScript Bridge pattern to decouple abstractions from implementations, enabling independent evolution and runtime swapping. Use when orthogonal variations risk combinatorial class explosion.
npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeThis skill uses the workspace's default tool permissions.
> Decouple abstraction from implementation so both can vary independently
Implements Bridge design pattern to decouple abstractions from implementations, avoiding class explosions in orthogonal hierarchies like shapes/renderers or notifications/channels. TypeScript examples provided.
Generates Bridge pattern for PHP 8.4 projects, creating abstraction, refined abstraction, implementor interface, concrete implementors, and unit tests in Domain/Infrastructure structure. For decoupling with multiple variation dimensions or runtime switching.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Decouple abstraction from implementation so both can vary independently
// Implementation interface
class Renderer {
renderCircle(radius) {
throw new Error('Not implemented');
}
}
class SVGRenderer extends Renderer {
renderCircle(radius) {
return `<circle r="${radius}"/>`;
}
}
class CanvasRenderer extends Renderer {
renderCircle(radius) {
return `ctx.arc(0,0,${radius},0,2*PI)`;
}
}
// Abstraction
class Shape {
constructor(renderer) {
this.renderer = renderer;
}
}
class Circle extends Shape {
constructor(radius, renderer) {
super(renderer);
this.radius = radius;
}
draw() {
return this.renderer.renderCircle(this.radius);
}
}
The Bridge pattern separates an abstraction from its implementation so that the two can evolve independently. Without Bridge, combining M abstractions with N implementations requires M*N classes. With Bridge, it requires M + N.
Trade-offs:
When NOT to use:
https://patterns.dev/javascript/bridge-pattern