桥接模式
概述
如果要绘制矩形、圆形、椭圆、正方形,至少需要四个形状类,如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时有两种设计方案:
- 第一种:为每一个形状提供一套各种颜色的版本,使用继承的方法,如果有四种形状,十二种颜色,则需要四十八个类。如果要增加新形状,则同时也要具备所有的颜色
- 第二种:提供四个形状类、十二种颜色类,对形状和颜色进行组合,此时系统中的类是十六个。如需增加新的形状或颜色,只需再增加一个新的形状类或颜色类即可
采用方案二可以使系统中类的个数更少,且系统扩展更为方便
模式实例
现需提供大小两种型号的画笔,能绘制三种不同的颜色
颜色接口 Color
public interface Color {
void bepaint(String penType, String name);
}
颜色实现类 Red
public class Red implements Color {
@Override
public void bepaint(String penType, String name) {
System.out.println(penType + "红色的" + name);
}
}
颜色实现类 Green
public class Green implements Color {
@Override
public void bepaint(String penType, String name) {
System.out.println(penType + "绿色的" + name);
}
}
颜色实现类 Blue
public class Blue implements Color {
@Override
public void bepaint(String penType, String name) {
System.out.println(penType + "蓝色的" + name);
}
}
画笔抽象类 Pen
public abstract class Pen {
protected Color color;
public void setColor(Color color) {
this.color = color;
}
public abstract void draw(String name);
}
画笔实现类 BigPen
public class BigPen extends Pen {
@Override
public void draw(String name) {
String penType = "大号毛笔绘制";
this.color.bepaint(penType, name);
}
}
画笔实现类 SmallPen
public class SmallPen extends Pen {
@Override
public void draw(String name) {
String penType = "小号毛笔绘制";
this.color.bepaint(penType, name);
}
}