56

设计模式之组合模式

 5 years ago
source link: http://coderlengary.github.io/2018/08/08/DesignModeCombine/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

组合模式也叫合成模式,是用来描述整体和部分之间的关系的。

JZbIz2Q.png!web

在组合模式里面有以下角色:

  • Component:抽象的组件对象,为组合中的对象声明接口,让客户端可以通过这个接口来访问和管理整个对象结构,可以在里面为定义的功能提供缺省的实现。

  • Leaf:叶子节点对象,定义和实现叶子对象的行为,不再包含其它的子节点对象。

  • Composite:组合对象,通常会存储子组件,定义包含子组件的那些组件的行为,并实现在组件接口中定义的与子组件有关的操作。

  • Client:客户端,通过组件接口来操作组合结构里面的组件对象。

说了这么多,还是用一个例子来说明一下

我们是一个卖电脑的集团。我们有总店,总店之下是分店,分店之下有加盟店。这时候,有一个新品牌开发了出来,准备在我们这里售卖,总部要把这个消息传递下去。

Component:

public abstract class Company{
  public abstract void add(Company company);

  public abstract void remove(Company company);

  public abstract void arrive(String computer);
}

Composite:

//总部
public class ZongGongSi extends Company{
  List<Company> fenDianList = new ArrayList<Company>();


  @Override
  public void add(Company company){
    fenDianList.add(company);

  }

  @Override
  public void remove(Company company){
    fenDianList.remove(company);
  }

  @Override
  public void arrive(String computer){
    System.out.println("总部: 新电脑到来: "+computer)
    for(Company fenDian: fenDianList){
      fenDian.arrive(computer);
    }
  }

}

//分店
public class FenDian extends Company{
  List<Company> jiaMengDianList = new ArrayList<Company>();


  @Override
  public void add(Company company){
    jiaMengDianList.add(company);

  }

  @Override
  public void remove(Company company){
    jiaMengDianList.remove(company);
  }

  @Override
  public void arrive(String computer){
    System.out.println("分店: 新电脑到来: "+computer)
    for(Company jiaMengDian: jiaMengDianList){
      jiaMengDian.arrive(computer);
    }
  }

}

//加盟店
public class JiaMengDian extends Company{



  @Override
  public void add(Company company){


  }

  @Override
  public void remove(Company company){

  }

  @Override
  public void arrive(String computer){
    System.out.println("加盟店: 新电脑到来: "+computer)
  }

}

客户端:

public class Client {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        ZongGongSi zongGongSi =new ZongGongSi();
        FenDian fenDian = new FenDian();
        JiaMengDian jiaMengDian = new JiaMengDian();
        fenDian.add(jiaMengDian);
        zongGongSi.add(fenDian);
        String computer = "MacBook Pro 2018";
        zongGongSi.arrive(computer);
    }

}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK