标签:code sha end 细节 over cte 编写 cti 包含
设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:
对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥接模式的应用。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。
当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。
桥接模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
它是一种对象结构型模式。
桥接模式的优点是:
缺点是:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。
桥接模式包含以下主要角色:
# 实现类角色
public interface IColor {
String name();
}
# 具体实现类角色
public class OrangeColor implements IColor {
@Override
public String name() {
return "Orange";
}
}
public class YellowColor implements IColor {
@Override
public String name() {
return "Yellow";
}
}
# 抽象类角色
public abstract class AbstractDrawShape {
protected IColor color;
public AbstractDrawShape(IColor color) {
this.color = color;
}
public abstract void draw();
}
# 扩展抽象类角色
public class DrawRoundShape extends AbstractDrawShape {
public DrawRoundShape(IColor color) {
super(color);
}
@Override
public void draw() {
System.out.println("颜色为 " + color.name() + " 的圆形");
}
}
public class DrawSquareShape extends AbstractDrawShape {
public DrawSquareShape(IColor color) {
super(color);
}
@Override
public void draw() {
System.out.println("颜色为 " + color.name() + " 的正方形");
}
}
理解桥接模式,重点需要理解如何将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。
桥接模式的应用场景
标签:code sha end 细节 over cte 编写 cti 包含
原文地址:https://www.cnblogs.com/wuqinglong/p/12335063.html