首页 > 其他分享 >9) Composite Pattern

9) Composite Pattern

时间:2023-06-06 13:35:03浏览次数:51  
标签:Body diameter name level Composite Pattern add 行星

类别:

 Structual Pattern

问题:

 

方案:

 

 

 

示例:

 

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

public class CompositePatternDemo {
    public static void main(String[] args) {
        Body sun = new Body("太阳", "恒星", 1392000000);
        Body mercury = new Body("水星", "行星", 4878000 );
        Body venus = new Body("金星", "行星", 12103600 );
        Body earth = new Body("地球", "行星", 12756300);
        Body moon = new Body("月球", "卫星", 3476280);
        Body mars = new Body("火星", "行星", 6794000);
        Body jupiter = new Body("木星", "行星", 142984000);
        Body saturn = new Body("土星", "行星", 120536000);
        Body saturnMoon1 = new Body("土卫一", "行星", 392000);
        Body saturnMoon2 = new Body("土卫二", "行星", 500000);
        Body uranus = new Body("天王星", "行星", 51120000);
        Body neptune = new Body("海王星", "行星", 49528000);
        
        sun.add(mercury);
        sun.add(venus);
        sun.add(earth);
        sun.add(mars);
        sun.add(jupiter);
        sun.add(saturn);
        sun.add(uranus);
        sun.add(neptune);
        earth.add(moon);
        saturn.add(saturnMoon1);
        saturn.add(saturnMoon2);
        
        System.out.println(sun);
        for (Body planet : sun.getSubLevelList()) {
            System.out.println(planet);
            for (Body satellite : planet.getSubLevelList()) {
                System.out.println(satellite);
            }
        }
    }
}

class Body {
    private String name;
    private String level;
    private int diameter;
    private List<Body> subLevelList;

    public Body(String name, String level, int diameter) {
        this.name = name;
        this.level = level;
        this.diameter = diameter;
        subLevelList = new ArrayList<Body>();
    }

    public void add(Body e) {
        subLevelList.add(e);
    }

    public void remove(Body e) {
        subLevelList.remove(e);
    }

    public List<Body> getSubLevelList() {
        return subLevelList;
    }

    @Override
    public String toString() {
        return "Body [name=" + name + ", level=" + level + ", diameter=" + diameter + "]";
    }

}

 

Body [name=太阳, level=恒星, diameter=1392000000]
Body [name=水星, level=行星, diameter=4878000]
Body [name=金星, level=行星, diameter=12103600]
Body [name=地球, level=行星, diameter=12756300]
Body [name=月球, level=卫星, diameter=3476280]
Body [name=火星, level=行星, diameter=6794000]
Body [name=木星, level=行星, diameter=142984000]
Body [name=土星, level=行星, diameter=120536000]
Body [name=土卫一, level=行星, diameter=392000]
Body [name=土卫二, level=行星, diameter=500000]
Body [name=天王星, level=行星, diameter=51120000]
Body [name=海王星, level=行星, diameter=49528000]

 

应用:

 

不足:(

 

优化:)

 

标签:Body,diameter,name,level,Composite,Pattern,add,行星
From: https://www.cnblogs.com/zno2/p/6694831.html

相关文章

  • 8) Filter/Criteria Pattern
    类别: StructualPattern问题: 方案:   示例: importjava.util.ArrayList;importjava.util.HashSet;importjava.util.List;importjava.util.Set;publicclassCriteriaPatternDemo{publicstaticvoidmain(String[]args){List<Person>p......
  • 7) Bridge Pattern
    类别: StructuralPatterns问题:连连看的问题 不使用桥接,要写81个类,使用桥接,只需要18个类方案: 示例: publicclassBridgePatternDemo{publicstaticvoidmain(String[]args){Somebodysb=newXiaohong(newBanana());sb.eat();......
  • 6) Adapter Pattern
    类别: StructuralPattern问题:什么是接口?按照标准提供服务,其他想要使用该接口的要按照该标准接入服务什么是依赖?持有目标对象,拥有使用权(AuseB)数据线?数据线按USB标准接入充电宝,通过lightning提供充电服务手机?通过lightning标准接入数据线  客户端因种种限制只能接入......
  • 10) Decorator Pattern
    类别: StructuralPattern问题: 在不改变接口的前提下增加额外的服务方案:   示例:publicclassDecoratorPatternDemo{publicstaticvoidmain(String[]args){Shapecircle=newCircle();ShaperedCircle=newRedShapeDecorator(newC......
  • cpp: Bridge Pattern
     /*****************************************************************//***\fileGold.h*\brief桥接模式BridgePatternC++14*2023年6月3日涂聚文GeovinDuVisualStudio2022edit.*\authorgeovindu*\dateJune2023***********************......
  • log4j2<PatternLayout>子节点浅析
    log4j2<PatternLayout>子节点浅析 首先声明本文并不教您怎么用log4j2,仅仅只对<PatternLayout>子节点进行说明。要看懂本文需要对log4j2有一定的了解,至少能够知道<Appenders>、<Layouts>和<Loggers>的区别。本文主要参考对象为log4j2官方手册:《ApacheLog4j2v.2.1User'sGuide......
  • cpp: Proxy Pattern
     /*****************************************************************//***\fileGoldWebSite.h*\brief代理模式ProxyPatternC++14*2023年5月31日涂聚文GeovinDuVisualStudio2022edit.*\authorgeovindu*\dateMay2023******************......
  • kibana智能检索发送多次_msearch —— 配置index pattern,同时设置时间段,就知道到底是
    kibanasite/elasticsearch/log-*/_field_stats?level=indices   返回:{"_shards":{"total":600,"successful":600,"failed":0},"indices":{"log-2017.11.22-19-192.168.2.3-93004":{"fields":{"Rec......
  • 解释器模式(Interpreter Pattern)
    解释器模式(InterpreterPattern)一、定义解释器模式(InterpreterPattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在SQL解析、符号处理引擎等。给定一个语言,定义它的文法的一种表示,并定义......
  • Abstract Factory Pattern 抽象工厂模式简介与 C# 示例【创建型】【设计模式来了】
    〇、简介1、什么是抽象工厂模式?一句话解释:  通过对抽象类和抽象工厂的一组实现,独立出一系列新的操作,客户端无需了解其逻辑直接访问。抽象工厂模式(AbstractFactoryPattern)是一种创建型模式。它用于创建一组相关对象的家族。强调的是一组对象之间的协作关系,而不是单个对象之......