10.4.3 桥接模式和组合模式

更新于 2026年10月10日 版权声明
10.4.3 桥接模式和组合模式

1)桥接模式

桥接模式就是把抽象部分与实现部分分离,使它们可以各自独立地变化,如图10-5所示。

图示

图10-5 桥接模式示例

首先,定义接口:

 public interface Sourceable{

  public void method();

 }

其次,分别定义两个实现类:

 public class SourceSub1implements Sourceable{

  @Override

  public void method(){

     System.out.println("this is the first sub!");

  }

 }

 public class SourceSub2implements Sourceable{

  @Override

  public void method(){

    System.out.println("this is the second sub!");

  }

 }

最后,定义一个桥,有Sourceable的一个实例:

 public abstract class Bridge{

  private Sourceable source;

  public void method(){

    source.method();

 }

  public Sourceable getSource(){

    return source;

  }

  public void setSource(Sourceable source){

    this.source=source;

  }

 }

 public class MyBridge extends Bridge{

  public void method(){

    getSource().method();

  }

 }

测试:

 public class BridgeTest{

  public static void main(String[]args){

    Bridge bridge=new MyBridge();

    /*调用第一个对象*/

    Sourceable source1=new SourceSub1();

    bridge.setSource(source1);

    bridge.method();

    /*调用第二个对象*/

    Sourceable source2=new SourceSub2();

    bridge.setSource(source2);

    bridge.method();

  }

 }

输出结果:

 this is the first sub!(https://www.daowen.com)

 this is the second sub!

这样,就通过对Bridge类的调用,实现了对接口Sourceable的实现类SourceSub1和SourceSub2的调用。

2)组合模式

组合模式又叫部分-整体模式,其关键是一个抽象类,它既可以代表图元,又可以代表图元的容器。使用组合模式,在处理类似树形结构的问题时比较方便,如图10-6所示。

图示

图10-6 组合模式示例

代码示例如下:

 public class TreeNode{

  private String name;

  private TreeNode parent;

  private Vector<TreeNode>children=new Vector<TreeNode>();

  public TreeNode(String name){

    this.name=name;

  }

  public String getName(){

    return name;

  }

  public void setName(String name){

    this.name=name;

  }

  public TreeNode getParent(){

    return parent;

  }

  public void setParent(TreeNode parent){

    this.parent=parent;

  }

  //添加孩子节点

  public void add(TreeNode node){

    children.add(node);

  }

  //删除孩子节点

  public void remove(TreeNode node){

    children.remove(node);

  }

  //取得孩子节点

  public Enumeration<TreeNode>getChildren(){

    return children.elements();

  }

 }

 public class Tree{

  TreeNode root=null;

  public Tree(String name){

    root=new TreeNode(name);

  }

  public static void main(String[]args){

    Tree tree=new Tree("A");

    TreeNode nodeB=new TreeNode("B");

    TreeNode nodeC=new TreeNode("C");

    nodeB.add(nodeC);

    tree.root.add(nodeB);

    System.out.println("build the tree finished!");

  }

 }

组合模式用于将多个对象组合在一起进行操作的场景,常用于表示树形结构,例如二叉树、树、图等。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)