设计模式创建型模式——建造者模式

本文深入解析建造者模式,一种常用的设计模式,用于构建复杂对象,使构建过程与表示分离,适用于固定构造顺序的对象构建。文章详细介绍了建造者模式的结构、角色及其实现方式,并通过创建机器人实例进行演示。

1.模式的定义

建造者模式(又称构建器模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

使用建造者模式,用户只需指定需要建造的类型就可以得到它们,而无需知道具体的建造过程和细节。

2.模式的结构

建造者模式中的角色构成

建造者(Builder):为创建一个Product对象的各个部件指定的抽象接口

具体的建造者(ConcreteBuilder):实现Builder接口,构造和装配各个部件

产品(Product):具体的产品

指挥者(Director):用于构建一个使用Builder接口的对象

3.模式的实现

下面通过建造者模式来实现创建机器人的过程

机器人产品类 Robot.java

public class Robot {

    private String head;
    private String hand;
    private String foot;
    private String body;

    public String getHead() {
        return head;
    }

    public void setHead(String head) {
        this.head = head;
    }

    public String getHand() {
        return hand;
    }

    public void setHand(String hand) {
        this.hand = hand;
    }

    public String getFoot() {
        return foot;
    }

    public void setFoot(String foot) {
        this.foot = foot;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }
}

创建机器人对象的各个零部件的接口 IBuildRobot.java

public interface IBuildRobot {

    public void buildHead();
    public void buildHand();
    public void buildFoot();
    public void buildBody();
    public Robot createRobot();

}

创建具体的小型机器人的类 SmallRobotBuilder.java 

public class SmallRobotBuilder implements IBuildRobot {
    Robot robot;

    public SmallRobotBuilder(){
        robot = new Robot();
    }

    @Override
    public void buildHead(){
        robot.setHead("头:直径20cm的球体");
    }

    @Override
    public void buildHand(){
        robot.setHand("手:小型");
    }

    @Override
    public void buildFoot(){
        robot.setFoot("脚:小型");
    }

    @Override
    public void buildBody(){
        robot.setBody("躯干:宽20cm的正方体");
    }

    public Robot createRobot(){
        return robot;
    }

}

指挥者类 Director.java 

public class Director {
    public Robot createRobotByDirector(IBuildRobot robot){
        robot.buildBody();
        robot.buildFoot();
        robot.buildHand();
        robot.buildHead();
        return robot.createRobot();
    }

}

客户端类 FactoryTest.java

public class FactoryTest {

    public static void main(String[] args){
        Director director = new Director();
        Robot robot = director.createRobotByDirector(new SmallRobotBuilder());
        System.out.println(robot.getHead());
        System.out.println(robot.getHand());
        System.out.println(robot.getFoot());
        System.out.println(robot.getBody());
    }
    
}

运行结果

建造者模式通常用于构建一些复杂的对象,这些对象内部构建间的构造顺序通常是固定的,但对象内部的构建通常面临复杂的变化。由于建造者模式使建造代码和表示代码分离,所以若需改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。比如需要创建一个大型机器人,则可以在上述例子的基础上添加一个 LargeRobotBuilder.java 的类。

(声明:本文为个人学习笔记,部分观点非原创。如有问题,欢迎讨论。转载请注明出处https://me.csdn.net/Iris_LDDDD )

内容概要:本文详细介绍了一个基于蜣螂优化算法(DBO)的栅格地图机器人路径规划项目,涵盖从算法原理、模型架构、代码实现到GUI界面设计的完整流程。项目通过模拟蜣螂滚动粪球的行为机制,构建群体智能优化模型,实现复杂环境中机器人的全局路径规划与动态避障。系统采用栅格地图建模,结合多目标代价函数(路径长度、平滑度、能耗、安全性)、路径编码策略与后处理平滑技术,提升路径质量。项目提供完整的Python代码实现,包括种群初始化、适应度评估、路径交叉与变异、进化更新等核心模块,并集成可视化GUI界面,支持参数配置、实时路径展示、结果导出等功能。; 适合人群:具备一定Python编程基础,熟悉基本算法与数据结构,对智能优化算法、机器人路径规划或人工智能应用感兴趣的开发者、研究人员及高校学生,尤其适合从事自动化、智能物流、智能制等相关领域的技术人员。; 使用场景及目标:①应用于智能仓储、智能制、医疗物流、安防巡检等场景中的机器人自主导航;②用于教学与科研中群体智能算法的实践与仿真;③为目标导向的多约束路径规划问题提供可扩展的技术方案,支持动态环境适应与多机器人协同扩展。; 阅读建议:建议读者结合文档中的代码示例与完整项目结构逐步实现并调试系统,重点关注DBO算法在路径搜索中的演化机制与多目标优化设计,同时利用GUI界面进行交互式实验,加深对算法行为的理解。项目强调工程化部署与可视化验证,适合动手实践与二次开发。
内容概要:本文系统阐述了程序员高效代码规范的重要性及实践方法,涵盖命名、格式、结构和异常处理四大核心方面。通过统一命名规则(如驼峰命名、常量全大写)、规范代码格式(缩进、换行、注释)、优化代码结构(单一职责、模块化设计)以及合理异常处理(精准捕获、日志记录),提升代码可读性、可维护性和团队协作效率。同时介绍了借助自动化工具(ESLint、Prettier等)、代码审查和制定团队规范文档来推动规范落地,并强调在执行中需平衡灵活性与严谨性,避免过度教条或忽视规范。; 适合人群:具备一定编程基础的初级到中级程序员,以及希望提升团队代码质量的技术负责人或开发团队;适用于参与协作开发、注重工程规范性的软件开发者。; 使用场景及目标:①帮助开发者建立标准化的编码习惯,减少沟通成本;②提升项目可维护性与稳定性,支持长期迭代;③在团队中推行统一的代码规范体系,结合工具实现自动化检查与格式化;④通过代码审查促进知识共享与技术水平整体提升。; 阅读建议:此资源不仅提供具体规范条目,更强调规范背后的逻辑与实施策略,建议读者结合自身技术栈配置相应工具链,并在实际项目中逐步应用文中建议,定期组织团队讨论与规范更新,确保规范持续有效落地。
在自动驾驶领域,360环视全景拼接技术是一项至关重要的功能,它为车辆提供了全方位的视觉感知,有助于提升行车安全。"360环视全景拼接demo,c++程序"是一个展示如何实现这一技术的代码示例,主要用于帮助开发者理解和实践相关算法。 我们来探讨360环视全景拼接的基本概念。这项技术通过安装在车辆四周的多个摄像头捕捉图像,然后利用图像处理和计算机视觉算法将这些图像进行校正、拼接,形成一个无缝的鸟瞰图。这样,驾驶员可以清晰地看到车辆周围的环境,包括盲区,有效减少碰撞风险。 在这个"C++程序"中,我们可以预期包含以下几个关键部分: 1. **摄像头校正**:由于摄像头安装位置、角度和畸变的影响,捕获的图像需要先进行校正。这通常涉及到鱼眼镜头校正,通过霍夫变换等方法消除镜头引起的非线性失真。 2. **图像配准**:将不同摄像头捕获的图像对齐,确保在同一个坐标系下。这一步可能涉及到特征点匹配、刚性变换估计等技术。 3. **图像拼接**:使用图像融合算法,如权重平均或基于内容的融合,将校正后的图像无缝拼接成全景图。这一步要求处理好图像间的过渡区域,避免出现明显的接缝。 4. **实时处理**:在自动驾驶环境中,360环视系统必须实时工作,因此代码会优化算法以满足实时性需求,可能涉及多线程、GPU加速等技术。 5. **用户界面**:展示全景图像的界面设计,包括交互方式、视角切换、显示质量等,对于用户体验至关重要。 6. **标定过程**:摄像头的内在参数(如焦距、主点坐标)和外在参数(如安装位置、角度)的标定,是确保图像拼接准确的基础。 这个"AdasSourrondView-main"可能是项目的主要源代码目录,里面可能包含了上述各个模块的实现,以及相关的配置文件和测试数据。开发者可以通过阅读源码、编译运行,理解并学习360环视全景拼接的完整流程。 在实际应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值