设计模式 bridge & decorator
-
目的
-
Decorator 模式:用于动态地给对象添加新的功能,而不改变其结构。它通过将对象放入一个装饰器类中,在运行时为对象添加额外的行为。这种模式通常用于需要对类的功能进行组合或扩展的场景。
-
Bridge 模式:用于将抽象部分与其实现部分分离,以便它们可以独立地变化。桥接模式的主要目的是解耦抽象和实现,从而使得它们可以独立扩展和变化。
-
-
Decorator 模式:
- 需要在不改变原有对象的情况下,动态地为对象添加新功能。
- 希望通过组合不同的装饰器类来扩展对象的行为。
-
Bridge 模式:
- 抽象和实现部分需要独立变化,而不影响彼此。
- 系统中有多个抽象和实现的组合,桥接模式可以减少类的数量。
4. 例子对比
-
Decorator:例如,假设你有一个简单的咖啡类,你希望能够动态地为咖啡添加不同的配料(如牛奶、糖、香草等),你可以使用装饰器模式来实现这个需求。
-
Bridge:在桥接模式的例子中,假设你有不同的图形类(如圆形、方形),并且你希望这些图形可以有不同的颜色实现(如红色、蓝色)。使用桥接模式可以将图形的形状和颜色实现解耦,以便你可以独立扩展形状和颜色的组合。
假设我们在开发一个绘图应用程序,需要绘制不同形状的对象,并且这些形状可以用不同的颜色进行渲染。我们可以使用桥接模式将形状和颜色分离,使得它们可以独立变化。
Bridge
1. 创建颜色接口和具体实现
java
// 颜色接口 public interface Color { void applyColor(); } // 具体颜色实现 public class RedColor implements Color {
2. 创建形状抽象类
java
// 形状抽象类,使用组合的方式包含颜色 public abstract class Shape { protected Color color; public Shape(Color color) { this.color = color; } public abstract void draw(); }
3. 创建具体的形状实现
java
public class Circle extends Shape { public Circle(Color color) { super(color); }
4. 使用桥接模式
java
public class BridgePatternDemo { public static void main(String[] args) { Shape redCircle = new Circle(new RedColor()); Shape greenSquare = new Square(new GreenColor()); redCircle.draw(); // Drawing Circle in Applying red color greenSquare.draw(); // Drawing Square in Applying green color } }
输出结果
scss
Drawing Circle in Applying red color Drawing Square in Applying green color
总结
在这个示例中,我们使用了桥接模式将形状(Shape
)与颜色(Color
)的实现分离开来。通过这种方式,可以自由组合不同的形状和颜色,而无需创建大量的子类来支持每种可能的组合。这样,形状和颜色可以独立扩展,增加新的形状或颜色时只需创建新的具体类,而不需要更改现有代码,体现了开闭原则。
Decoration:
Decorator 模式:装饰器和被装饰的对象实现相同的接口。装饰器内部包含一个对被装饰对象的引用,并通过这个引用来扩展其功能。
示例:
java
interface Coffee { String getDescription(); double getCost(); } class SimpleCoffee implements Coffee {
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!