ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

徒手撸设计模式-组合模式

2022-06-24 02:02:24  阅读:174  来源: 互联网

标签:car name 组合 composite cars Cars 设计模式 type 徒手


概念

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。

参考链接: https://www.runoob.com/design-pattern/composite-pattern.html

代码案例

只需要一个组合类-组装层级关系

/**
 * 车子组合类
 */
@Getter
public class Cars {
    private String name;
    private String type;
    private String colour;
    private List<Cars> cars;

    public Cars(String name, String type, String colour) {
        this.name = name;
        this.type = type;
        this.colour = colour;
        cars= new ArrayList<>();
    }

    /**
     * 生产车子
     * @param car
     */
    public void addCar(Cars car){
        cars.add(car);
    }

    /**
     * 卖出车子
     * @param car
     */
    public void removeCar(Cars car){
        cars.remove(car);
    }

    /**
     * 现有车子
     * @return
     */
    public List<Cars> getCars(){
        return cars;
    }

    @Override
    public String toString() {
        return "Cars{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", colour='" + colour + '\'' +
                ", cars=" + cars +
                '}';
    }
}

 

测试主类

/**
 * 设计模式控制器
 */
@RestController
@RequestMapping("/designPattern")
@Slf4j
public class DesignController {

    /**
    *进行组合
    *顶层是车子统称
    *车子下分为自行车和汽车
    *自行车又包含捷安特自行车,汽车包含宝马车
    *因为根据索引取得车子,所以入参顺序要一致,也可以根据类型获取
    */
    @PostMapping("/composite")
    public ResponseModel composite(@RequestBody List<com.koukay.student.design.composite.Cars> cars) {
        log.info("DesignController--- composite --start--");
        com.koukay.student.design.composite.Cars topCars = cars.get(0);
        com.koukay.student.design.composite.Cars car = cars.get(1);
        com.koukay.student.design.composite.Cars bicycle = cars.get(2);
        com.koukay.student.design.composite.Cars carBmw = cars.get(3);
        com.koukay.student.design.composite.Cars bicycleGiant = cars.get(4);
        topCars.addCar(car);
        topCars.addCar(bicycle);
        car.addCar(carBmw);
        bicycle.addCar(bicycleGiant);
        for (com.koukay.student.design.composite.Cars topCarsCar : topCars.getCars()) {
            log.info(topCarsCar.toString());
            for (com.koukay.student.design.composite.Cars topCarsCarCar : topCarsCar.getCars()) {
                log.info(topCarsCarCar.toString());
            }

        }
        log.info("DesignController--- composite --end--");
        return new ResponseModel("组合模式完成", 200, topCars);
    }
}

 

测试案例

 

 

2022-06-24 01:13:16.940 INFO  DesignController--- composite --start-- 【http-nio-8081-exec-1】【DesignController:59】
2022-06-24 01:13:20.179 INFO  Cars{name='汽车', type='car', colour='blue', cars=[Cars{name='宝马', type='car_BMW', colour='yellow', cars=[]}]} 【http-nio-8081-exec-1】【DesignController:70】
2022-06-24 01:13:20.180 INFO  Cars{name='宝马', type='car_BMW', colour='yellow', cars=[]} 【http-nio-8081-exec-1】【DesignController:72】
2022-06-24 01:13:20.180 INFO  Cars{name='自行车', type='bicycle', colour='white', cars=[Cars{name='捷安特', type='bicycle_giant', colour='blue', cars=[]}]} 【http-nio-8081-exec-1】【DesignController:70】
2022-06-24 01:13:20.181 INFO  Cars{name='捷安特', type='bicycle_giant', colour='blue', cars=[]} 【http-nio-8081-exec-1】【DesignController:72】
2022-06-24 01:13:20.181 INFO  DesignController--- composite --end-- 【http-nio-8081-exec-1】【DesignController:76】

 

 

 

标签:car,name,组合,composite,cars,Cars,设计模式,type,徒手
来源: https://www.cnblogs.com/hikoukay/p/16407353.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有