您的位置:首页 > 其它

设计模式学习笔记--桥接模式

2016-11-24 11:12 525 查看

七、桥接模式

桥接(Bridge)用于把抽象化与实现化解耦,使得而这可以独立变化。桥接模式中涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,且这两个类型的类可被结构化改变,而互不影响。

简介

多数情况下,过多的继承可能造成类爆炸问题,扩展十分不灵活。减少类之间的耦合,使之相对独立。

桥接模式也有优缺点:1、优点是实现了抽象和现实的分离,增强扩展性,实现细节公开透明。2、缺点是增加了程序设计层次和理解层面的难度。

适用场景是:1、避免过多的类的继承的情况;2、需要两个类的相对独立。

演示

演示用不同的桥接实现类,相同的抽象方法,实现不同的颜色画画。定义一个接口
DrawApi
和它的实现类
RedCircle
GreenCircle
。而
Shape
是一个图形的抽象类。



定义接口

桥接接口
DrawApi.java


public interface DrawApi {
//绘制圆形,半径、圆心坐标x,y
public void drawCircle(int radius,int x,int y);
}


创建实现类

RedCircle.java


public class RedCircle implements DrawApi {
@override
public void drawCircle(int radius,int x,int y){
System.out.println("Draw Red Circle " + "r = " + raius + "Ox = " + x + "Oy = " + y );
}
}


GreenCircle.java


public class GreenCircle implements DrawApi {
@override
public void drawCircle(int radius,int x,int y){
System.out.println("Draw Green Circle " + "r = " + raius + "Ox = " + x + "Oy = " + y );
}
}


创建抽象类

Shape.java


public abstract class Shape {
//使用桥接接口`DrawApi`
protected DrawApi drawapi;

//构造函数中初始化drawapi
protected Shape(DrawApi drawapi){
this.drawapi = drawapi;
}
//抽象的draw方法
public abstract void draw();
}


创建接口实现类

Circle.java


public class Circle implements Shape{
//基本属性
private int radius,x,y;
//构造函数,接收接本参数
public Circle(int radius,int x,int y,DrawApi drawapi){
super(drawapi);
this.x = x;
this.y = y;
this.radius = radius;
}

public void draw(){
//drawapi是Shape的成员变量,子类继承使用。
drawapi.drawCircle(radius,x,y)
}
}


调用

BridgePatternDemo.java

public class BridgePatternDemo{
public static void main(String[] args){
//
Shape red = new Circle(100,100,10,new RedCircle());
Shape green = new Circle(90,100,10,new GreenCircle());
//绘制图形
red.draw();
green.draw();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息