定义:

  • 将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

    特点:

  • 由于抽象与实现分离,所以扩展能力强。(优点)

  • 其实现细节对客户透明。(优点)
  • 由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。(缺点)

    通常适用场景:

  • 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。

  • 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
  • 当一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性时。

    demo代码:

  • 桥梁(接口)及实现类 ```java public interface Machine { void make(); }

public class AMachine implements Machine{ @Override public void make() { System.out.println(“A机器加工水果”); } }

public class BMachine implements Machine{ @Override public void make() { System.out.println(“B机器加工水果”); } }

  1. - 抽象类及抽象类的实现类
  2. ```java
  3. public abstract class Fruit{
  4. protected Machine machine;
  5. protected Fruit(Machine machine){
  6. this.machine=machine;
  7. }
  8. public abstract void make();
  9. }
  10. public class Peach extends Fruit {
  11. protected Peach(Machine machine) {
  12. super(machine);
  13. }
  14. @Override
  15. public void make() {
  16. machine.make();
  17. }
  18. }
  19. public class Pear extends Fruit {
  20. protected Pear(Machine machine) {
  21. super(machine);
  22. }
  23. @Override
  24. public void make() {
  25. machine.make();
  26. }
  27. }
  • 测试
    public static void main(String[] args) {
      Fruit peach= new Peach(new AMachine());
      Fruit pear= new Pear(new BMachine());
      peach.make();
      pear.make();
    }