文档章节

【结构型】- 组合模式

ZeroneLove
 ZeroneLove
发布于 02/19 22:11
字数 735
阅读 9
收藏 0

组合模式


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

角色


  • 抽象构件角色(Component):组合中对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明1个接口用于访问和管理Component子部件,接口可用于管理所有的子对象。(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它

  • 树枝构件角色(Composite):定义有子部件的那些部件的行为。存储子部件,在Component接口中实现与子部件有关的操作

  • 树叶构件角色(Leaf):在组合树中表示叶节点对象,叶节点没有子节点。并在组合中定义图元对象的行为

  • 客户角色(Client):通过component接口操纵组合部件的对象


抽象构件角色: Number

package com.zhiwei.composite;
public interface Number {
    double computer(double x, double y);
}

树叶构件角色

package com.zhiwei.composite;

public class AddNumber implements Number {
    public double computer(double x, double y) {
    	double result = x + y;
    	System.out.println("AddNumber计算结果:"+result);
        return result;
    }
}
package com.zhiwei.composite;

public class SubNumber implements Number {

    public double computer(double x, double y) {
        double result = x - y;
        System.out.println("SubNumber计算结果:"+result);
        return result;
    }
}
package com.zhiwei.composite;

public class MulNumber implements Number {

    public double computer(double x, double y) {
        double result = x * y;
        System.out.println("MulNumber计算结果:"+result);
        return result;
    }
}
package com.zhiwei.composite;
public class DivNumber implements Number {

    public double computer(double x, double y) {
        double result = x/y;
        System.out.println("DivNumber计算结果:"+result);
        return result;
    }
}

树枝构件角色:CompositeNumber

package com.zhiwei.composite;

import java.util.List;
import java.util.ArrayList;

public class CompositeNumber implements Number {
	
    private List<Number> list = new ArrayList<Number>();

    public void add(Number organ) {
        list.add(organ);
    }

    public void remove(Number organ) {
        list.remove(organ);
    }

    public Number getChild(int i) {
        return list.get(i);
    }

    public double computer(double x, double y) {

        double count = 0d;
        for (int i = 0; i < list.size(); i++) {
            Number number = list.get(i);
            count += number.computer(x,y);
        }
        return count;
    }
}

测试代码:

CompositeNumber compositeNumber = new CompositeNumber();

compositeNumber.add(new AddNumber());  //加法:8
compositeNumber.add(new SubNumber());  //减法:4
compositeNumber.add(new MulNumber());  //乘法:12
compositeNumber.add(new DivNumber());  //除法:3

//8+4+12+3=27
System.out.println("总运算结果为:"+ compositeNumber.computer(6,2));

结果:


组合模式分析

组合模式中,枝干和树叶组件根据Java多态特点,通过接口联系在一起,树叶组件负责实现具体的功能(功能比较单一),树枝组件通过组合树叶组件来实现不同的功能,这种设计思想和外观设计模式很类似,外观类也是通过组合内部的子系统的功能,为客户端提供统一的访问接口,只是组合模式职责更加单一

© 著作权归作者所有

ZeroneLove
粉丝 5
博文 164
码字总数 133695
作品 0
深圳
高级程序员
私信 提问
设计原则和设计模式_Index

设计原则 1.1 什么是设计原则 ?(https://my.oschina.net/jimilee/blog/732569) 1.2 设计原则如何用? 1.3 设计原则详解 1.4 30分钟快速理解面向对象设计原则 2. 设计模式 2.1 什么时候使用设...

无寄语
2016/08/14
1
0
设计模式之禅之设计模式-组合模式

一:组合模式的定义 --->组合模式(Composite Pattern)也叫合成模式,有时又叫做部分-整体模式(Part-Whole),主要是用来描述部分与整体的关系 --->将对象组合成树形结构以表示“部分-整体”的层...

无信不立
2016/01/22
0
0
【设计模式】组合模式 Composite Pattern

树形结构是软件行业很常见的一种结构,几乎随处可见, 比如: HTML 页面中的DOM,产品的分类,通常一些应用或网站的菜单,Windows Form 中的控件继承关系,Android中的View继承关系,部门的组...

风之源
2018/08/20
0
0
一天一种设计模式之八-----组合模式

一.组合模式简介 组合模式属于结构型模式 将组合模式合成树形结构以表示“部分-整体” 的层次结构。“Composite”使得用户对单个对象和组合对象的使用具有一致性。 适用性: 你想表示对象的部...

tongqu
2016/03/15
84
0
【白话设计模式十七】组合模式(Composite)

白话设计模式 工厂模式 单例模式 【白话设计模式一】简单工厂模式(Simple Factory) 【白话设计模式二】外观模式(Facade) 【白话设计模式三】适配器模式(Adapter) 【白话设计模式四】单例模式...

陶邦仁
2016/04/06
366
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部