Builder模式

 

Builder

        Builder是为了将构建复杂对象的组装过程和它的创建部件与产品对象分离.

注意:是解耦组装过程和创建具体部件过程实现使用Director,它仅关心组装部件

的过程,不关心每个具体部件的创建。

        而Builder则是定义出创建部件的接口,然而具体的创建,则是有

ConcreteBuilder来实现。由于在Director使用是Builder接口所以,这样就

可以重用创建过程,因为不同的ConcreteBuilder,虽然创建部件不同相同,但

是组装过程却相同。

        我们假设,每个汽车都有车轮,发动机等部件组成,如果不使用模式,按照一

般的方法,在构造函数中,创建部件车轮,发动机,并且然后进行了组装。

        下面以一辆Polo为例:

public class Polo
...
{
//在构造函数中,创建部件,然后进行组装
public Polo()...{
//创建部件
车轮 obj1=new 车轮();

//进行组装部件
this.车轮s.add(obj1);

车轮 obj2
=new 车轮();

this.车轮s.add(obj2);
//这里省略其他两个车轮
.................

汽车发动机 objNessan
=new 汽车发动机();
this.汽车发动机=objNessan;

}

//汽车的组成部件
public vector 车轮s=new Vector;

public 汽车发动机 汽车发动机 =null;
//这里省略了其他部件和功能函数
.................
}




        这就是我们没有使用Builder的方式,这样使构造函数相当的复杂。

        因为它负责创建具体的部件如(4个车轮,和一个发动机),然后需要进行组装

成为产品Polo.

        如果我们再增加一种车的类型HongDa,虽然它们种类不同,具体的部件不同,

但是组装的过程相同和部件的抽象(4个车轮和一个发动机)相同。

        这样违背地OO的思想重用,于是我们把组装的过程,和创建部件,从产品的构

造中独立出来,其实就是简化产品的构造函数,封装成对象,来重用。

        于是我们外部化一个Builder它负责创建汽车部件和组装过程,因为创建的部

件不同,如Polo的车轮和HongDa的不同,但是它们的组装过程却是相同的,于是

我们先定义,几个方法将由它的具体子类实现,和一个具体的方法,它负责组装过

程。明白的会看出这就是模板方法(Template Method)模式。

//它抽象了创建部件,定义一个骨架方法
public class Builder
...
{
    
public void builder车轮(int n)...{};

    
public void builder发动机()...{};


    
public void director构造过程()
   ...
{

        
this.builder车轮(4);

         
this.builder车轮();
    }

}

 
public class PoloBuilder extends Builder
...
{
    
private Polo polo=new Polo();

    
public void builder车轮(int n)
     ...
{
        
for(int i=0;i<n;i++)
         ...
{
             车轮 obj1
=new 车轮();

              polo.车轮s.add(obj1);
           }

       }


     
public void builder发动机()
    ...
{
          汽车发动机 objNessan
=new 汽车发动机();

          polo.汽车发动机
=objNessan;
      }

      
public Polo getProduct()
     ...
{
         
return polo;
       }

}


        其实当builder模式的director角色和builder角色合并得化,它就是

template method模式。抽象方法负责创建部件,具体骨架方法负责组装过程。

这样具体的builder只需实现抽象方法。

        Builder目前负责创建部件和组装过程,如果我们把这两个职责,再进行划分

处理,单独一个负责组装过程,另一个负责创建部件。

        因为虽然部件不同,但是过程是相同的。于是抽象出两个类。

//该类负责创建部件,具体的由子类实现
public class Builder
...
{
   
public void builder车轮(int n)...{};

   
public void builder发动机()...{};
}

//该类实现组装过程
public class Director
...
{
   
private Builder builder=null;

    
public class Director(Builder builder)
   ...
{
        
this.builder=builder;
       }


    
public void 组装过程()
   ...
{
       builder.builder车轮(
4);

       builder.builder车轮();
     }

}



        在Director中使用builder接口,然后按照一定规则进行组装,大家可以看

出这是针对接口进行编程的体现。我们看具体的builder

public class PoloBuilder extends Builder
...
{
   
private Polo polo=new Polo();

   
public void builder车轮(int n)
   ...
{
      
for(int i=0;i<n;i++)
      ...
{
          车轮 obj1
=new 车轮();

          polo.车轮s.add(obj1);
        }

     }


   
public void builder发动机()
   ...
{
          汽车发动机 objNessan
=new 汽车发动机();

          polo.汽车发动机
=objNessan;
      }

    
public Polo getProduct()
    ...
{
        
return polo;
      }

}



        客户端的使用,首先创建具体的builder,然后使用Director

PoloBuilder polobuild=new PoloBuilder();

Director d
=new Director(polobuild);

d.组装过程();
Product p
=polobuild.getProduct();


内容概要:本文提出了一种基于神经网络的数据驱动迭代学习控制(ILC)算法,专门用于解决具有未知动态模型和重复任务特征的非线性单输入单输出(SISO)离散时间系统在无人车路径跟踪中的应用问题,并通过Matlab代码实现了算法的仿真验证。该方法充分利用神经网络强大的非线性逼近能力和自适应学习特性,结合迭代学习控制在周期性任务中逐步优化控制输入的优势,即使在缺乏精确系统数学模型的前提下,也能有效提升无人车在复杂环境下的路径跟踪精度与系统稳定性。算法的核心在于通过多次运行过程中不断修正控制律,实现对期望轨迹的渐近跟踪。; 适合人群:具备一定现代控制理论基础知识、熟悉迭代学习控制基本概念,并拥有Matlab编程与仿真实践经验的研究生、科研人员及自动化、机器人领域的相关工程师。; 使用场景及目标:① 解决无人车在模型未知或难以精确建模的复杂动态环境中的高精度路径跟踪控制问题;② 为一类具有重复运行特性的非线性系统提供一种不依赖精确模型的先进控制策略;③ 推动数据驱动与人工智能方法在自动化控制领域的工程应用与学术研究发展。; 阅读建议:读者应重点理解神经网络在控制律中的设计与集成方式、迭代学习机制的具体实现流程,以及两者融合的创新点。务必结合所提供的Matlab代码进行详细的阅读、调试与仿真分析,通过改变参数和工况来观察控制效果,以深化对算法内在机理和性能特点的掌握。
内容概要:本文档是一份面向参与大学生创新创业训练计划(大创项目)的在校学生的系统性指导资源,全面覆盖国家级与省级项目的申报、执行、中期检查、结题全流程。内容包括大创项目的政策解读、分类与级别说明、申报流程与时间节点、评审标准解析,并提供创新训练、创业训练、创业实践三类项目的申报书撰写指南与范文。文档重点围绕物联网、数据分析、Web应用三大技术方向,提供可运行的完整项目实现案例,如基于ESP32的智慧农场系统、基于Python与Tableau的公交数据可视化平台、基于Spring Boot的校园协作平台,涵盖技术架构、代码实现、系统部署等细节。此外,还包括答辩PPT制作技巧、中期检查与结题报告的撰写模板,以及各类工具与学习资源推荐,助力学生从项目构思到成果落地的全过程。; 适合人群:参与大创项目的在校本科生,尤其是计算机、数据科学、物联网等相关专业,具备一定编程基础和科研兴趣的学生。; 使用场景及目标:①指导学生高效撰写符合评审要求的申报书、答辩材料、中期报告与结题报告;②提供三大主流技术方向的完整项目范例,帮助学生快速搭建原型系统,提升技术实践能力;③辅助团队进行项目规划、进度管理与成果总结,确保项目顺利立项与结题。; 阅读建议:建议根据项目所处阶段选择性阅读对应章节,申报阶段重点学习第1-4章,执行阶段参考第5-9章的技术实现案例,结题阶段使用第6章模板。应结合自身项目特点灵活应用范文与代码,避免照搬,注重原创性与可行性,并积极与指导教师沟通完善方案。
内容概要:本文围绕基于超局部模型的无模型预测电流控制(MFPCC)与自抗扰扩张状态观测器(ESO)相结合的改进型模型预测控制策略展开研究,提出了一种摆脱传统依赖精确电机数学模型限制的高性能控制方法。该方法通过构建超局部模型简化永磁同步电机(PMSM)的动态特性描述,并引入ESO实时估计系统内部参数扰动及外部负载干扰,实现对扰动的前馈补偿,从而显著提升控制系统的鲁棒性和动态性能。研究详细阐述了MFPCC的预测机制、ESO的设计原理及其在电流环中的集成方案,并借助Simulink搭建完整的仿真模型,对所提控制策略在动态响应速度、抗负载扰动能力及稳态控制精度等方面进行了全面的仿真验证,结果表明其相较于传统方法具有更优的综合性能。; 适合人群:具备自动控制理论基础、熟悉永磁同步电机驱动系统原理及Simulink/MATLAB仿真实践的电气工程、自动化、机电一体化等领域的研究生、科研人员和工程技术人员。; 使用场景及目标:①应用于对鲁棒性要求高的永磁同步电机高性能驱动系统设计;②为无模型控制、自抗扰控制(ADRC)等先进控制理论的教学与科研提供一个完整的、可复现的案例参考;③解决实际工程中因电机参数摄动、温度变化、负载突变等因素导致的模型失配与控制性能下降问题。; 阅读建议:读者应结合提供的Simulink仿真模型,深入剖析MFPCC与ESO协同工作的内在机理,重点关注ESO带宽整定、预测步长选择等关键参数对系统性能的影响,并通过对比不同工况下的仿真结果,深刻理解该先进控制策略的设计思想与实际应用技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值