Java设计模式-Java实现桥接模式(一)

2014-11-24 08:51:46 · 作者: · 浏览: 4
不多说了,直接上代码。原代码是由一雨田使用C++写的,我改成了使用 Java实现。
[java]
package cn.areful.designpattern.bridge;
/************************************************************************************************************\
* 任务叙述:我们现在要实现一个画图 系统,这个系统的需求暂时来说有以下几个:
* 1、画圆、画长方形。(先实现画这两个形状)
* 2、已经有两个画图库了,这些画图库中定义了我们需要的操作,我们没必要重新去实现了
* 3、我们的系统能够决定使用哪个的画图库中的操作
* 根据以上的需求,我们的代码设计如下(这里先不使用Bridge模式,以便对比) :
\************************************************************************************************************/
/************************************************************************************************************\
* 两个画图库
\************************************************************************************************************/
/** 画图库1 */
class DrawLib1 {
public void DrawCircle() {
System.out.println("DrawLib1,DrawCircle()");
}
public void DrawRectangle() {
System.out.println("DrawLib1,DrawRectangle()");
}
public void DrawTriangle() {
System.out.println("DrawLib1,DrawTriangle()");
}
}
/** 画图库2 */
class DrawLib2 {
public void DrawCircle() {
System.out.println("DrawLib2,DrawCircle()");
}
public void DrawRectangle() {
System.out.println("DrawLib2,DrawRectangle()");
}
public void DrawTriangle() {
System.out.println("DrawLib2,DrawTriangle()");
}
}
/************************************************************************************************************
* \ 不使用桥接模式 \
************************************************************************************************************/
/** 通过绘图系统的接口,很容易抽象出来两个绘图库的绘图接口: */
abstract class Shape1 {
public abstract void draw();
protected DrawLib1 lib1;
}
abstract class Shape2 {
public abstract void draw();
protected DrawLib2 lib2;
}
/** 然后通过绘图库1和绘图库2的接口,实现画圆和画矩形: */
class Circle1 extends Shape1 {
public Circle1() {
lib1 = new DrawLib1();
}
@Override
public void draw() {
lib1.DrawCircle();
}
}
class Rectangle1 extends Shape1 {
public Rectangle1() {
lib1 = new DrawLib1();
}
@Override
public void draw() {
lib1.DrawRectangle();
}
}
class Circle2 extends Shape2 {
public Circle2() {
lib2 = new DrawLib2();
}
@Override
public void draw() {
lib2.DrawCircle();
}
}
class Rectangle2 extends Shape2 {
public Rectangle2() {
lib2 = new DrawLib2();
}
@Override
public void draw() {
lib2.DrawRectangle();
}
}
/** 调用库1的方法 */
class Draw1 {
public Draw1(Shape1 s1) {
s1.draw();
}
}
/** 调用库2的方法 */
class Draw2 {
public Draw2(Shape2 s2) {
s2.draw();
}
}
/** 不使用桥接方式,实现绘图系统 */
class NoBridge {
public void test() {
Circle1 c1 = new Circle1();
Circle2 c2 = new Circle2();
Rectangle1 r1 = new Rectangle1();
Recta