桥接模式(合成/聚合复用原则)

桥接模式

合成/聚合复用原则

合成/聚合复用原则(CARP),尽量使用合成/聚合,尽量不要使用类继承

合成(Composition),也有翻译成组合)和**聚合(Aggregation)**都是关联的特殊种类。聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分:合成则是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。比方说,大雁有两个翅膀,翅膀与大雁是部分和整体的关系,并且它们的生命周期是相同的,于是大雁和翅膀就是合成关系。而大雁是群居动物,所以每只大雁都是属于一个雁群,一个雁群可以有多只大雁,所以大雁和雁群是聚合关系。

合成聚合复用原则的好处是,优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物

桥接模式

桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化

通过示例了解桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与其实现部分分离,使它们可以独立地进行变化。在桥接模式中,抽象部分和实现部分通过继承或组合实现解耦,形成两个独立的等级结构,然后通过一个关联关系(桥)将它们连接起来。

以下是一个简单的Java桥接模式示例,以图形绘制为例,抽象部分是形状(Shape),实现部分是颜色(Color),桥接部分是将形状和颜色关联起来:

抽象部分,形状接口

// 抽象部分:形状接口
public interface Shape {
    void draw(Color color);
}

实现部分:颜色接口

public interface Color {
    void applyColor();
}

具体实现部分:具体颜色

public class Red implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying red color");
    }
}
public class Blue implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying blue color");
    }
}

桥接部分:具体形状

public abstract class AbstractShape implements Shape {
    protected Color color;

    public AbstractShape(Color color) {
        this.color = color;
    }

    @Override
    public abstract void draw(Color color);
}

具体形状类:圆形

public class Circle extends AbstractShape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    public void draw(Color color) {
        System.out.println("Drawing a circle with color");
        color.applyColor();
    }
}

具体形状类:正方形

public class Square extends AbstractShape {
    public Square(Color color) {
        super(color);
    }

    @Override
    public void draw(Color color) {
        System.out.println("Drawing a square with color");
        color.applyColor();
    }
}

主程序

public class BridgePatternDemo {
    public static void main(String[] args) {
        Shape circle = new Circle(new Red());
        circle.draw(circle.getColor());

        Shape square = new Square(new Blue());
        square.draw(square.getColor());
    }
}
  1. Shape是抽象部分,定义了形状的绘制方法,但不关心具体颜色。
  2. Color是实现部分,提供了不同的颜色应用方法。
  3. AbstractShape是桥接部分,它持有Color对象,并实现了Shape接口,将形状和颜色关联起来。
  4. Circle和Square是具体的形状,它们扩展了AbstractShape,并提供了自己的绘制逻辑。
  5. ain方法展示了如何使用桥接模式,创建不同形状和颜色的组合。

通过桥接模式,我们可以独立地增加新的形状和颜色,而不需要修改原有代码,符合开闭原则。同时,它也降低了系统的复杂度,提高了可维护性。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值