设计模式 bridge & decorator

  •  目的

    • Decorator 模式:用于动态地给对象添加新的功能,而不改变其结构。它通过将对象放入一个装饰器类中,在运行时为对象添加额外的行为。这种模式通常用于需要对类的功能进行组合或扩展的场景。

    • Bridge 模式:用于将抽象部分与其实现部分分离,以便它们可以独立地变化。桥接模式的主要目的是解耦抽象和实现,从而使得它们可以独立扩展和变化。

  • Decorator 模式

    • 需要在不改变原有对象的情况下,动态地为对象添加新功能。
    • 希望通过组合不同的装饰器类来扩展对象的行为。
  • Bridge 模式

    • 抽象和实现部分需要独立变化,而不影响彼此。
    • 系统中有多个抽象和实现的组合,桥接模式可以减少类的数量。

4. 例子对比

  • Decorator:例如,假设你有一个简单的咖啡类,你希望能够动态地为咖啡添加不同的配料(如牛奶、糖、香草等),你可以使用装饰器模式来实现这个需求。

  • Bridge:在桥接模式的例子中,假设你有不同的图形类(如圆形、方形),并且你希望这些图形可以有不同的颜色实现(如红色、蓝色)。使用桥接模式可以将图形的形状和颜色实现解耦,以便你可以独立扩展形状和颜色的组合。

假设我们在开发一个绘图应用程序,需要绘制不同形状的对象,并且这些形状可以用不同的颜色进行渲染。我们可以使用桥接模式将形状和颜色分离,使得它们可以独立变化。

Bridge

1. 创建颜色接口和具体实现

java
// 颜色接口 public interface Color { void applyColor(); } // 具体颜色实现 public class RedColor implements Color { @Override public void applyColor() { System.out.println("Applying red color"); } } public class GreenColor implements Color { @Override public void applyColor() { System.out.println("Applying green 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); } @Override public void draw() { System.out.print("Drawing Circle in "); color.applyColor(); } } public class Square extends Shape { public Square(Color color) { super(color); } @Override public void draw() { System.out.print("Drawing Square in "); color.applyColor(); } }

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 { @Override public String getDescription() { return "Simple coffee"; } @Override public double getCost() { return 5; } } class MilkDecorator implements Coffee { private Coffee coffee; public MilkDecorator(Coffee coffee) { this.coffee = coffee; } @Override public String getDescription() { return coffee.getDescription() + ", milk"; } @Override public double getCost() { return coffee.getCost() + 2; } }
posted @   我爱麻辣香锅  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示