*组合模式

23种创新模式总署
父文链接
父文链接

  • 组合:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

  • 使用场景:将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树等

注解:当前组合结构的示意图如下:一个🌲型图


代码:

//获取书籍的浏览量和销售量
public interface Statistics {  
  
    int getBrowseCount();  /
      
    int getSalesCount();  
  
}
//计算机类书籍
public class ComputerBookStatistics implements Statistics {  
  
    @Override  
    public int getBrowseCount() {  
        int browseCount = 0;  
        List<String> allComputerBooks = getAllComputerBooks();  
        for (String computerBook : allComputerBooks) {  
            browseCount += getBrowseCount(computerBook);  
        }  
        return browseCount;  
    }  
  
    @Override  
    public int getSalesCount() {  
        int saleCount = 0;  
        List<String> allComputerBooks = getAllComputerBooks();  
        for (String computerBook : allComputerBooks) {  
            saleCount += getSaleCount(computerBook);  
        }  
        return saleCount;  
    }  
  
}
//医学类书籍
public class MedicalBookStatistics implements Statistics {  
  
    @Override  
    public int getBrowseCount() {  
        int browseCount = 0;  
        List<String> allMedicalBooks = getAllMedicalBooks();  
        for (String medicalBook : allMedicalBooks) {  
            browseCount += getBrowseCount(medicalBook);  
        }  
        return browseCount;  
    }  
  
    @Override  
    public int getSalesCount() {  
        int saleCount = 0;  
        List<String> allMedicalBooks = getAllMedicalBooks();  
        for (String medicalBook : allMedicalBooks) {  
            saleCount += getSaleCount(medicalBook);  
        }  
        return saleCount;  
    }  
  
}

问题:获取科技类书籍的销售量,浏览量?

public class TechnicalStatistics implements Statistics {  
      
    private List<Statistics> statistics = new ArrayList<Statistics>();  
      
    public TechnicalStatistics() {  
        statistics.add(new ComputerBookStatistics());  
        statistics.add(new MedicalBookStatistics());  
    }  
  
    @Override  
    public int getBrowseCount() {  
        int browseCount = 0;  
        for (Statistics s : statistics) {  
            browseCount += s.getBrowseCount();  
        }  
        return browseCount;  
    }  
  
    @Override  
    public int getSalesCount() {  
        int saleCount = 0;  
        for (Statistics s : statistics) {  
            saleCount += s.getBrowseCount();  
        }  
        return saleCount;  
    }  
  
}

问题:统计所有书籍的浏览量和销售量的办法?

public class AllStatistics implements Statistics {  
  
    private List<Statistics> statistics = new ArrayList<Statistics>();  
  
    public AllStatistics() {  
        statistics.add(new NovelStatistics());  
        statistics.add(new TechnicalStatistics());  
    }  
  
    @Override  
    public int getBrowseCount() {  
        int browseCount = 0;  
        for (Statistics s : statistics) {  
            browseCount += s.getBrowseCount();  
        }  
        return browseCount;  
    }  
  
    @Override  
    public int getSalesCount() {  
        int saleCount = 0;  
        for (Statistics s : statistics) {  
            saleCount += s.getBrowseCount();  
        }  
        return saleCount;  
    }  
  
}

使用:

new TechnicalStatistics().getBrowseCount();  //获取科技类书籍浏览量
new AllStatistics().getSalesCount();  //获取所有书籍的总销量
。。。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 商品类别树## 考虑这样一个实际的应用:管理商品类别树。 在实现跟商品有关的应用系统的时候...
    七寸知架构阅读 6,102评论 10 59
  • 继承是is-a的关系。组合和聚合有点像,有些书上没有作区分,都称之为has-a,有些书上对其进行了较为严格区分,组...
    时待吾阅读 477评论 0 1
  • 组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用...
    Binaryify阅读 489评论 0 0
  • 组合模式Composite 背景 我们可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象。我...
    践行者阅读 511评论 1 3
  • 组合模式的设计动机:组合模式定义了如何将容器对象和叶子对象进行递归组合,使得客户在使用的过程中无须进行区分,可以对...
    stepanoval阅读 527评论 0 0