博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【结构型】- 组合模式
阅读量:6814 次
发布时间:2019-06-26

本文共 2555 字,大约阅读时间需要 8 分钟。

hot3.png

组合模式


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

角色


  • 抽象构件角色(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
list = new ArrayList
(); 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());  //加法:8compositeNumber.add(new SubNumber());  //减法:4compositeNumber.add(new MulNumber());  //乘法:12compositeNumber.add(new DivNumber());  //除法:3//8+4+12+3=27System.out.println("总运算结果为:"+ compositeNumber.computer(6,2));

结果:


组合模式分析

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

转载于:https://my.oschina.net/yangzhiwei256/blog/3012135

你可能感兴趣的文章
java求素数和求一个数的一个正整数的质因数
查看>>
centos6.6 部署 cacti 并采集交换机流量
查看>>
web 开发之js---巧用iframe实现jsp无刷新上传文件
查看>>
WMS相关中英文术语
查看>>
实时监测网络流量
查看>>
块IO与流IO简介
查看>>
best introduction to camera calibration
查看>>
struts2单文件上传案例演示(二)
查看>>
OC-核心语法(3)(分类、SEL、类本质)
查看>>
web2py官方文档翻译00
查看>>
python深坑集锦 -- super
查看>>
my29_PXC集群状态查看
查看>>
LRUCache
查看>>
vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解
查看>>
无刷新分页
查看>>
媒体查询-全面学习
查看>>
jquery判断滚动条是否到达顶部或者底部
查看>>
[模板] 动态树/LCT
查看>>
requirejs+anjularjs+express框架
查看>>
继续画图形
查看>>