您的位置:首页 > 编程语言 > Java开发

DesignPattern_Java:Bridge Pattern

2015-09-01 19:59 597 查看

桥梁模式 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();
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: