设计模式桥接与装饰者1: 实现图形绘制及颜色选择的灵活方案

需积分: 0 0 下载量 51 浏览量 更新于2024-01-21 收藏 3.17MB PDF 举报
08桥接与装饰者1;08桥接与装饰者1设计模式桥接模式•模式动机• 设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案: 1. 使用继承:通过继承,每个形状类都可以派生出不同颜色的子类,例如RedRectangle、RedCircle、GreenRectangle等。但是这种方案会导致类的爆炸性增长,当需要新增一种颜色的同时,还需要新增所有形状类与该颜色的组合类,给维护和扩展带来了困难。 2. 使用组合:将形状和颜色分离,形状类和颜色类作为两个独立的维度来进行设计。形状类负责定义形状的基本行为,颜色类负责定义颜色的基本行为,通过组合两者可以创建具有不同颜色的形状。这种方案解决了类的爆炸性增长问题,但是在扩展形状和颜色组合时,仍然存在问题。 为了解决上述问题,桥接模式应运而生。 •模式定义• 桥接模式是将抽象部分与实现部分分离,使它们都可以独立地变化。通过提供抽象的接口来分离实体类和行为类,使它们可以独立地变化,避免了继承关系的固定。 •模式结构• 1. 抽象部分(Abstraction):定义抽象部分的接口,拥有一个指向实现部分的引用。 2. 扩展抽象部分(RefinedAbstraction):扩展抽象部分的接口,实现一些特定的功能。 3. 实现部分(Implementor):定义实现部分的接口。 4. 具体实现部分(ConcreteImplementor):实现接口,并具体实现相应的功能。 •模式实现• 在桥接模式中,根据需求将抽象部分和实现部分设计成两个独立的维度,通过组合的方式关联起来。 以绘制不同形状和颜色的图形为例:首先,我们定义形状的抽象部分Shape,内部拥有一个实现部分Color的引用。然后,定义扩展抽象部分,如Rectangle、Circle等,继承Shape并实现自己的特定功能。接下来,实现部分Color定义具体的颜色,如Red、Green等。最后,具体实现部分ConcreteImplementor实现Color接口,提供相应的颜色实现。 通过这种方式,我们可以动态地将不同的形状和颜色组合在一起,实现了形状和颜色的解耦和灵活的扩展。 •模式优点• 1. 分离抽象和实现,提高了系统的灵活性和可扩展性。 2. 可以动态地组合不同的抽象部分和实现部分,实现更多的组合效果。 3. 符合开闭原则,对抽象和实现的扩展都是通过新增代码来实现的,不需要修改原有代码。 •模式缺点• 1. 增加了系统的复杂性,需要额外的设计与编码工作。 2. 对于细粒度的抽象和实现的分离,代码的管理和维护会变得更加困难。 •适用场景• 1. 当系统需要在多个维度上进行扩展时,使用桥接模式可以减少类的爆炸性增长。 2. 当系统需要独立变化的抽象和实现时,使用桥接模式可以解耦两者之间的关系。 •总结• 桥接模式可以将抽象部分和实现部分进行解耦,使系统更加灵活和可扩展。通过分离多个维度的变化,可以动态地组合不同的抽象部分和实现部分,实现更多的组合效果。虽然桥接模式会增加系统的复杂性,但在需要在多个维度上进行扩展和独立变化时,是一种很好的设计模式选择。
2022-08-08 上传