桥梁模式 Bridge Pattern 桥接模式
Decouple an abstraction from its implementation so that the two can vary independently.
将抽象和实现解耦,使得两者可以独立地变化。
抽象化角色(Abstraction):该角色抽象化的给出定义,并保存一个对实现化对象的引用。
package com.DesignPattern.Structural.Bridge;
//抽象化角色
public abstract class Abstraction {
// 定义对实现化角色的引用
private Implementor imp;
public Abstraction(Implementor imp) {
this.imp = imp;
}
// 业务方法
public void operation() {
this.imp.operationImp();
}
}
实现化角色(Implementor):该角色给出实现化角色的接口,但不给出具体的实现。
package com.DesignPattern.Structural.Bridge;
//实现化角色
public interface Implementor {
// 方法的实现化声明
public void operationImp();
}
修正抽象化角色(RefinedAbstraction):该角色扩展抽象化角色,它引用实现化角色并对抽象化角色进行修正。
package com.DesignPattern.Structural.Bridge;
//修正抽象化角色
public class RefinedAbstraction extends Abstraction {
public RefinedAbstraction(Implementor imp) {
super(imp);
}
// 修正父类的方法
public void operation() {
// 业务代码
super.operation();
System.out.println("RefinedAbstraction.operation()");
}
}
具体实现化角色(ConcreteImplementor):该角色对实现化角色接口中的方法进行具体实现。
package com.DesignPattern.Structural.Bridge;
//具体实现化角色
public class ConcreteImplementor implements Implementor {
// 方法的实现化实现
@Override
public void operationImp() {
// 业务处理逻辑代码
System.out.println("ConcreteImplementor.operationImp()");
}
}
Client.java
package com.DesignPattern.Structural.Bridge;
public class Client {
public static void main(String[] args) {
// 定义一个实现化角色
Implementor imp = new ConcreteImplementor();
// 定义一个抽象化角色
Abstraction abs = new RefinedAbstraction(imp);
// 执行
abs.operation();
}
}
桥梁模式的实例
AbstractShape.java
package com.DesignPattern.Structural.Bridge;
//图形
public abstract class AbstractShape {
Color color;
public AbstractShape(Color color) {
this.color = color;
}
public abstract void draw();
}
Color.java
package com.DesignPattern.Structural.Bridge;
//颜色
public interface Color {
String getColor();
}
Cirle.java
package com.DesignPattern.Structural.Bridge;
//圆形
public class Circle extends AbstractShape {
public Circle(Color color) {
super(color);
}
@Override
public void draw() {
System.out.println("use "+color.getColor()+" draw Circle...");
}
}
Square.java
package com.DesignPattern.Structural.Bridge;
//正方形
public class Square extends AbstractShape{
public Square(Color color) {
super(color);
}
@Override
public void draw() {
System.out.println("use "+color.getColor()+ " draw Square");
}
}
Red.java
package com.DesignPattern.Structural.Bridge;
public class Red implements Color {
@Override
public String getColor() {
return "Red Color";
}
}
Green.java
package com.DesignPattern.Structural.Bridge;
public class Green implements Color {
@Override
public String getColor() {
return "Green Color";
}
}
Test.java
package com.DesignPattern.Structural.Bridge;
public class Test {
public static void main(String[] args){
Color color=new Green();
AbstractShape shape=new Square(color);
shape.draw();
}
}
![](https://img-blog.csdn.net/20150901195508145)