精华内容
下载资源
问答
  • 介绍了空间曲面溜槽参数化设计系统组成、设计流程与设计优点。宏景塔一矿块煤仓内螺旋溜槽设计实例表明,与常规设计方法相比,参数化设计方法可使设计周期缩短80%以上,并且检查、校核省时省力,在提高工作效率同时,也...
  • 参数化设计的优点是对设计人员的初始设计要求低,无需精确绘图,只需勾绘草图,... 2.参数化模板设计主要技术特征 参数化模板设计主要技术特征是:基于特征、全尺寸约束、尺寸驱动设计修改、全数据相关。 ① 基于特征:...
  • 全参数化设计是快速研究与开发同类产品的重要手段。...该全参数化设计的直齿圆柱齿轮通过PROGRAM命令修改其中的几个主要参数,能够快速得到相应参数的直齿圆柱齿轮,体现了全参数化设计快捷、方便的优点
  • 首先提出了一种基于综合工具VHDL参数化设计方法,其次以多路奇偶校验生成器为例,详细说明了参数化基本过程,最后在HMMerFPGA实现中应用所提出方法,从而实现对运算单元数量控制。所提出参数化方法具有...
  • 第1章 绪论1.1 海底管道的破坏形式1.2 天津大学深海结构实验室简介1.3 国内外压力舱技术指标对比第2章 Python基础2.1 所需要的软件2.2 Python参数化建模的优点2.3 ABAQUS的运行机理2.4 Python语言简介2.5 ...

    第1章 绪论

    1.1 海底管道的破坏形式

    1.2 天津大学深海结构实验室简介

    1.3 国内外压力舱技术指标对比

    第2章 Python基础

    2.1 所需要的软件

    2.2 Python参数化建模的优点

    2.3 ABAQUS的运行机理

    2.4 Python语言简介

    2.5 Python基本语法

    2.5.1 注释

    2.5.2 空行

    2.5.3 缩进

    2.5.4 代码的分隔符

    第1章 绪论

    1.1 海底管道的破坏形式

    1.2 天津大学深海结构实验室简介

    1.3 国内外压力舱技术指标对比

    第2章 Python基础

    2.1 所需要的软件

    2.2 Python参数化建模的优点

    2.3 ABAQUS的运行机理

    2.4 Python语言简介

    2.5 Python基本语法

    2.5.1 注释

    2.5.2 空行

    2.5.3 缩进

    2.5.4 代码的分隔符

    2.6 Python数据结构

    2.6.1 列表(1ist)

    2.6.2 元组(tuple)

    2.6.3 字典(dictionary)

    2.7 运算符

    2.8 常用函数

    2.8.1 类型转换函数

    2.8.2 常用数学函数

    2.8.3 随机数生成函数

    2.9 判断

    2.10 循环

    2.10.1 while

    2.10.2 for…in

    2.10.3 break

    2.10.4 continue

    2.11 函数定义

    2.12 ABAQUS辛的Python命令简介

    2.12.1 常用几何绘制命令

    2.12.2 常用几何查找命令

    2.12.3 常用部件构建命令

    2.12.4 常用装配命令

    第3章 局部屈曲

    3.1 非线性有限元基本理论

    3.1.1 材料非线性

    3.1.2 几何非线性

    3.1.3 接触非线性

    3.2 求解方法

    3.2.1 牛顿迭代法

    3.2.2 弧长法

    3.2.3 静水流体加载法

    3.3 不同缺陷对管道局部屈曲压力的影响

    3.3.1 局部椭圆度模型

    3.3.2 腐蚀缺陷

    3.3.3 复合型缺陷

    3.3.4 落物撞击引起的凹陷

    第4章 屈曲传播与止屈防护

    4.1 准静态传播

    4.1.1 整体式止屈器

    4.1.2 扣入式止屈器

    4.1.3 缠绕式止屈器

    4.2 动态传播

    4.3 数据传递技术

    参考文献

    展开全文
  • 渐开线圆柱直齿齿轮参数化设计的主要问题是大部分的画图软件没有渐开线命令。用三次样条曲线近似替代渐开线,并对不同插值方案生成的样条曲线进行误差分析,从而得到一种简单方便的三次样条插值方法。用该方法参数化...
  • 针对端截形曲线存在转折点的复杂螺旋面成型铣刀设计,利用Pro/E软件自身的编程计算和参数化造型功能,充分发挥了计算法和作图法设计的优点。具有设计过程形象、直观、精度和效率高的特点,为复杂螺旋面工件成型加工的...
  • 该参数化后的斜齿圆柱齿轮可以通过改变各个相应驱动参数,能够快速得到不同参数的斜齿圆柱齿轮零件,体现了参数化设计快捷的优点。通过机构的运动仿真,可以看到运动仿真过程中是否出现干涉现象,有利于机构优化和提高...
  • 以圆度仪工作台传动齿轮为研究对象,论述了参数化设计方法,以Pro/E软件为平台,推导出了直齿圆柱...参数化设计具有快捷、方便的优点,还能够缩短齿轮设计周期、降低成本、减少重复工作,为其他参数化设计提供了理论依据。
  • 本文应用Visual C++ 开发工具将参数化技术和有限元技术融为一体,建立了一个专用渐开线直齿圆柱齿轮高效分析平台。运用此平台,用户只需输入所需参数,系统自动建模计算。其优点在于采用有限元法提高了建模分析...
  • 近日我司为客户设计的一款涵道无人机已进入交付阶段,该款无人机对风扇桨尖涡和尾流的抑制作用直接影响了涵道风扇组合流场特征,而涵道外形又决定了这种抑制作用的大小。涵道风扇参数的选择对涵道风扇组合系统的气动...

    近日我司为客户设计的一款涵道无人机已进入交付阶段,该款无人机对风扇桨尖涡和尾流的抑制作用直接影响了涵道风扇组合流场特征,而涵道外形又决定了这种抑制作用的大小。

    涵道风扇参数的选择对涵道风扇组合系统的气动性能起着至关重要的作用。而面临多变量优化的问题,采用基于代理模型的优化方法对涵道风扇设计参数进行优化设计,该方法具有成本低、精度高、周期短等优点,因此被广泛应用到工程领域的设计优化方面。

    针对涵道风扇设计参数,开展涵道风扇优化设计研究工作。利用专业螺旋桨设计软件CAESES进行螺旋桨的参数化设计,配套isight遗传算法优化软件输入到ANSYS中进行优化计算。

    591d491046250b344f67b9354d404ede.png

     1. 基于动量源的数值模拟方法

    通过求解三维不可压 Navier-Stokes 方程组引入动量源模型以模拟涵道风扇组合系统对流场的作用假设不考虑能量的损耗采用定常黏性不可压流对涵道风扇组合流场进行计算直角坐标系下描述定常流动的三维方程为:

     85a92b1526baaa886cd5d3c581651635.png

    式中W,F,G,H为无黏通量、、为黏性通量S 为动量源项; t为用于数值计算时的虚拟时间、XYZ 为空间坐标

    采用动量源方法将风扇桨盘简化为一个薄作用盘以施加于作用盘的动量源来代替风扇桨盘对流场的作用求解包含动量源项的三维 N-S 方程化了涵道风扇系统诱导作用下的准定常流场求解离散形式的动量源项需要建立桨叶与作用盘的对应关系基于所选翼型升力系数 Cl 阻力系数 Cd 求解出作用盘网格单元上的桨叶力dF以叶素理论建立桨叶气动力模型由流场迭代求解得出桨盘处的诱导速度桨叶的主要几何特征在源项的表达中体现

    1eb505d161cc3c6cbd2f76f6a24e118d.png

    2. 涵道风扇组合流场网格生成

    采用CFD 方法计算涵道风扇气动特性的精确性和计算过

    程的收敛速度,主要取决于流场的主控方程的计算格式以及流场计算单元的网格生成质量。同时,网格数量决定了计算速度的快慢。针对网格数量及计算速度这对矛盾体,采取以下策略: 对于研究对象的流场压力梯度、密度等参数变化较大的区域应适当地进行网格加密,其他区域进行去密化处理。

    f2f10e3271b4b6cff1846a253e5e85a2.png

    涵道唇口是涵道风扇系统产生拉力的一个重要因素。气流通过涵道唇口时,发生壁面绕流现象,使得唇口部分形成一个低压区,从而产生升力。本节对比了不同涵道唇口半径对涵道风扇组合系统气动特性的影响。图中 CP 代表压力系数,是表征静压相对动压的物理量。可以看出,随着涵 道唇口半径的增加,涵道唇口处的负压区域及大小 均有减小,导致涵道拉力减小。然而,如图4于涵道唇口半径来讲并非越小越好,较小的唇口半径易在唇口区域产生气流分离,从而使得涵道升力不升反降。

    bbef0ae4b7a649d10e85b858f0d3f619.pngbc23694f64ec3ec6a5a4a23b499088ae.png

    e65db792a267f38872cac5c4994d6821.png

    涵道扩散口

    涵道内壁面对风扇的尾流收缩具有一定的抑制作用,影响了涵道风扇的组合流场,增加涵道扩散角 可以进一步改变涵道风扇系统的气动特性。随着扩散角的增加,风扇拉力略有增加。其原因是 涵道内壁对涵道风扇的尾流具有抑制其收缩的作用,降低流场的轴向速度,轴向速度的降低会导致风 扇桨叶当地迎角的增加,进而升力相应增大。在一定范围内,涵道扩散角越大,对桨叶沿展向的诱导速度分布的影响越大。

    55c1bd887e345e819000038a073af8bf.png

    b56099c9911477161316803db48bbf88.pngdda978e6dc2d79bd11c25e33bfd30fca.png

    a580ccf904de0b8c35dafbda87a36021.png3 结论

    针对涵道风扇组合系统的气动特性和性能展开了设计研究。对涵道风扇组合流场进行了CFD 建模计算,并对涵道风扇的多个设计参数进行了优化设计。主要结论如下。

    ( 1) 通过求解三维不可压Navier-Stokes方程组,并引入动量源模型以模拟涵道风扇升力系统的对流场的作用,建立了基于 CFD 的涵道风扇升力系统组合流场计算模型。

    ( 2) 对不同设计参数下的涵道风扇气动特性和性能进行了计算

    分析,并对唇口半径、涵道扩散角、桨尖距离涵道内壁的间隙和风扇桨盘中心在涵道的位置等主要设计参数进行了影响分析,明确了各参 数对涵道风扇气动特性的影响规律。

    ( 3) 建立有效的涵道风扇升力系统设计参数的优化设计模型,优化结果显示,同等总距下,涵道风扇组合体总拉力得到了有效提高,证明了方案设计的可靠性。

    d566bd3f6b6dd15358eae4a986a3fb84.png

    联系人:豆经理   联系方式:15910978105(同微信) 

    地址:北京市延庆无人机创新基地
    往期推荐阅读往期热文(点击文章标题即可直接阅读)
    1. 揭秘无人机自动机场 — 换电机场VS充电机场

    2. 我国首个实用化无人机“蜂群”,中国电科单车发射48架巡飞弹

    3. 简单、高效、低成本风洞测试方案

    4. 守护能源互联网,云圣智能旗舰级车载无人机+全自动机场系统

    5. 埃洛克防务发布守望者、观测者

    6. 走进飞思无人科研平台,让无人智能科研更简单

    7. 上海特金推出国内首个城市级网格化无人机管控系统

    8. 窜入南海,侦察我军潜艇:中国强行没收美军水下无人机

    9. 长光禹辰 MS600 V2多光谱相机发布

    afc675251569d130a1ed38138122112d.png

    7ea8dd8e8ca0f94a969ca2df2edecea8.pngafc675251569d130a1ed38138122112d.png

    展开全文
  • 齿轮传动是最重要机械传动之一。齿轮零件具有传动效率高、传动比稳定、...本篇文章将详细介绍通过Proe/Creo创建标准渐开线直齿圆柱齿轮过程及利用程序实现参数化自动重新生成基本方式。 直齿圆柱齿轮基本参数及...

    齿轮传动是最重要的机械传动之一。齿轮零件具有传动效率高、传动比稳定、结构紧凑等优点。因而齿轮零件应用广泛,同时齿轮零件的结构形式也多种多样。根据齿廓的发生线不同,齿轮可以分为渐开线齿轮和圆弧齿轮。根据齿轮的结构形式的不同,齿轮又可以分为直齿轮、斜齿轮和锥齿轮等。本篇文章将详细介绍通过Proe/Creo创建标准渐开线直齿圆柱齿轮过程及利用程序实现参数化自动重新生成的基本方式。

    直齿圆柱齿轮基本参数及公式

    • 齿数(z)

    齿轮上的每一个用于啮合的凸起部分, 均称为轮齿。齿轮整个圆周上轮齿的总数称为齿数,一般以字母z表示。

    • 模数(m)

    模数是决定齿大小的因素,齿轮模数被定义为模数制轮齿的一个基本参数,是人为抽象出来用以度量轮齿规模的数。

    e6539b17f3b85e78bde0e84e87b91c91.png
    • 分度圆直径(d)

    分度圆是为了便于齿轮设计和制造而选择的一个尺寸参考。齿轮的轮齿尺寸均以此圆为基准而加以确定。

    • 参数化直齿圆柱齿轮设计基本计算公式
    d61ca00ff0750cf36dcd50d718226fe3.png

    直齿圆柱齿轮基本建模过程

    STEP1:新建文件并添加相关参数

    e282ac05e107693978896730bf48f59f.png
    2ed03d371d7fde3c9c681936f594dbb2.png

    "参数"对话框

    STEP2:分别新建齿轮基圆、分度圆、齿顶圆、齿根圆等四个草绘(以基圆为例进行说明)

    ①于基准平面上新建草绘圆,并标注直径尺寸

    c29a7bcccb17308c94ee30317ab027f4.png

    ②切换至[工具]-[关系],为草绘圆添加草绘关系(分度圆、齿顶圆、齿根圆同理)

    08e591c48a1ee10a6f9abea14bf6172f.png
    f5e8cc21dc0cd2baf0ddc0ae6d8b0188.png

    STEP3:利用曲线方程创建渐开线曲线:基准曲面--来自方程的曲线--笛卡尔坐标系

    a3e5f1937a2eebe728a060a7179c3110.png

    STEP4:利用上步渐开线曲线,拉伸齿廓曲面,其拉伸深度为参数:B,并添加特征参数

    6b38bbf7914ca10928a2f6f6b07b918d.png

    STEP5:延伸齿廓曲面,此处采用拉伸的方式代替,拉伸深度同上

    5284bc0f6bca39efd358637fbb712c96.png

    STEP6:对齿廓曲面进行合并

    d2f2c85010e91dc3cc3cea9427dc94f1.png

    STEP7:对齿廓曲面进行镜像,完成一个完整齿形轮廓

    ①创建镜像参考平面,此处采用拉伸曲面方式创建,角度添加草绘关系:sd1=360/(4*z)或sd1=90/z

    489d05acee1ac021d19ef496a1992d66.png
    cc37e3c7ae2b5738911b6fea7d50181b.png
    aad57c53e2c9233b35b9b21ca39889bc.png

    ②完成齿廓曲面镜像

    3384cdf4ed402b601d9f8ff439d12a45.png

    ③对齿廓曲面合并

    aac539ff5ec7b47626da52b220817683.png

    ④对上步合并齿廓曲面复制选择性粘贴--旋转:360/z

    aad972ad4124fd56239e813c8ba6f05b.png

    ⑤对上步所做面组进行尺寸阵列

    3c591562b58dc9f598bbf45642c95cc9.png

    ⑤-2对阵列特征添加关系:阵列数量=齿数(z)-1;增量角度=360/z

    550416f61faca69458d0764b5b76b10c.png

    STEP8:拉伸齿根圆,拉伸深度为参数:B

    53d6403d59fd495804487b3e8a768c2e.png

    STEP9:将第一个齿廓曲面与齿根圆曲面合并

    34bc27604e4b096112aef393853bb6a2.png

    将上步合并曲面与复制选择性粘贴的齿廓曲面合并

    97534efca692a5477e1659763b7041f4.png

    对上步合并曲面进行参考阵列

    a53b8a0934233e1562f3ae5cb9da8f8a.png

    STEP10:拉伸齿顶圆实体,拉伸深度为参数B

    ad3feee6177b0b23ab1d1e4b9ca0b7b8.png

    STEP11:利用阵列面组对齿顶圆实体进行实体化去除材料

    d14a33f95023855d25e116baa7b4901d.png

    至此,齿轮齿形的创建参数化创建过程基本完成,可以通过工具参数修改:模数(m)、齿数(z)等相关齿轮参数重新生成得到所需规格齿轮,亦可通过:程序--编辑设计来完成重新生成时输入相关参数来修改齿轮参数!具体做法不做演示。

    展开全文
  • 所提出的方法具有增益参数随源对象的角度而变化的优点。 DGP解决了不同角度之间的优化折衷问题,该问题在每个位置都实现了最佳解决方案。 为了匹配相应的增益参数,在频带中估计了B格式信号的源定位。 对于合成信号...
  • 文中提出了一种基于μC/OS-III操作系统的多功能、...相较于普通RTU,本设计具有模块、多功能、并且支持SDI-12接口标准的优点,并且硬件上具有低功耗、强大的计算能力和存储能力,软件上具有多任务、实时性等优点。
  • 利用VBA技术具有的参数化设计的优点,开发了夹具工作图自动生成软件,它具有用户界面友好,使用方便的特点。能有效地实现夹具轴向尺寸的精确设计。应用实例表明该软件能显著地提高设计质量,降低设计者的工作强度。
  • 行为参数化对常用设计模式重构 策略模式 普通策略模式 下面使用lambda表达式来重构 另外 模版方法 普通模版方法 下面使用lambda表达式来重构这个模版方法 另外 工厂模式 普通工厂模式 下面使用lambda...

     

    目录

    背景

    介绍

    具体示例

    具体实现

    优点

    Lambda表达式和函数式接口

    Lambda

    函数式接口

    使用函数式接口

    行为参数化对常用设计模式的重构

    策略模式

    普通策略模式

    下面使用lambda表达式来重构

    另外

    模版方法

    普通模版方法

    下面使用lambda表达式来重构这个模版方法

    另外

    工厂模式

    普通工厂模式

    下面使用lambda表达式来重构这个模版方法

    另外

    结语


    背景

    在日常开发中,有个众所周知的问题,不管你做什么,用户的需求肯定会变。

    比方说,今天的需求是把所有“被打回”状态的合同更新“待跟进”状态,明天的需求又是把所有支付过进场费的合同打上标签。

    需要应对不断变化的需求,又需要把工作量降到最小、出错率降到最低,“行为参数化”是可以帮助你处理频繁变更的需求的一种软件开发模式 。

    介绍

    一言以蔽之,它意味着拿出一个代码块,把它准备好却不去执行它。这个代码块以后可以被你程序的其他部分调用。

    例如,你可以将代码块作为参数传递给另一个方法,稍后再去执行它。这样,这个方法的行为就基于那块代码被参数化了。 

    具体示例

    如果我们采用行为参数化这种开发模式,针对以上的需求,我们就可以准备好一个doDataBrushing的方法,参数是需要对所有合同(或其他主体)进行的某个操作,它可以接受不同的新行为作为参数,然后去执行。

    具体实现

    BrushDataTemplateUtil#doDataBrushing

    package com.enmonster.optimon.bos.utils;
    
    import com.enmonster.optimon.bos.common.constant.NumberConstant;
    import com.enmonster.optimon.bos.service.brushdata.HandleBrushDataService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Component;
    
    import java.util.concurrent.ExecutorService;
    
    /**
     * 刷数据模板工具类
     *
     * @author lvchengyi
     * @datetime 2020/12/11 15:25
     */
    @Slf4j
    @Component
    public class BrushDataTemplateUtil {
        /**
         * 功能描述:刷数据处理模板
         *
         * @param startId         起始ID
         * @param overId          结束ID
         * @param logTag          打印日志TAG
         * @param executorService 处理线程池
         * @param func            核心处理方法
         * @return void
         * @author lvchengyi
         * @date 15:27 2020/12/11
         */
        public void doDataBrushing(long startId, long overId, String logTag, ExecutorService executorService, HandleBrushDataService func) {
            long startTime = System.currentTimeMillis();
            //最大主键id
            final long maxId = overId + 1;
            // id区间500
            final int limit = NumberConstant.NUMBER_FIVE_HUNDRED;
            for (long i = startId; i < maxId; i += limit) {
                final long index = i;
                executorService.execute(() -> {
                    try {
                        log.info("【{}】开始-startId:{}", logTag, index);
                        long endId = Math.min(maxId, index + limit);
                        // 数据处理
                        long count = func.handlePartition(index, endId);
                        log.info("【{}】处理数据{}个-startId:{}-endId:{}", logTag, count, index, endId);
                    } catch (Exception e) {
                        log.error("【{}】发生异常-startId:{}-endId:{}", logTag, index, Math.min(maxId, index + limit), e);
                    } finally {
                        log.info("【{}】结束-startId:{},共耗时{}s", logTag, index, (System.currentTimeMillis() - startTime) / 1000);
                    }
                });
            }
        }
    }

    HandleBrushDataService 处理类

    package com.enmonster.optimon.bos.service.brushdata;
    
    /**
     * 刷数据模板 核心处理方法
     *
     * @author lvchengyi
     * @datetime 2020/12/11 15:18
     */
    @FunctionalInterface
    
    
    public interface HandleBrushDataService {
        /**
         * 功能描述:处理分片数据
         *
         * @param partitionStartId 分片开始id
         * @param partitionEndId   分片结束id
         * @return long 处理数据数
         * @author lvchengyi
         * @date 15:19 2020/12/11
         */
        long handlePartition(long partitionStartId, long partitionEndId);
    }
    
    

    实际使用场景

    @Override
    public void brushHadApportion(Long startId, Long overId) {
        brushDataTemplateUtil.doDataBrushing(startId, overId, "处理XXX", dataTransferExecutor, (partitionStartId, partitionEndId) -> {
    		// 准备数据源
    // ... do something ...
    		// 创建结果容器
    // ... do something ...
    		// 处理逻辑
    // ... do something ...
            return num;
        });
    }
     

    优点

    1.避免重复的工作,降低出错率

    3.代码清晰易于理解,易于长期维护

    Lambda表达式和函数式接口

    行为参数化即定义代码块为行为,并传递它。Java8提供了Lambda表达式来替代匿名实现类(避免了新建类,代码实现上也更为简洁)。

    Lambda

    Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常。 

    Lambda的四大特点:

    匿名——我们说匿名,是因为它不像普通的方法那样有一个明确的名称:写得少而想得多!

    函数——我们说它是函数,是因为Lambda函数不像方法那样属于某个特定的类。但和方 法一样,Lambda有参数列表、函数主体、返回类型,还可能有可以抛出的异常列表。

    传递——Lambda表达式可以作为参数传递给方法或存储在变量中。

    简洁——无需像匿名类那样写很多模板代码。 

    函数式接口

    函数式接口就是只定义一个抽象方法的接口。比如日常使用中的:Comparator和Runnable。

    函数式接口的抽象方法的签名基本上就是Lambda表达式的签名(函数描述符),是用函数式接口抽象方法的签名来描述需要什么样签名的Lambda表达式。

    例如,Runnable接口可以看作一个什么也不接受什么也不返回(void)的函数的签名。因为它只有一个叫作run的抽象方法,这个方法什么也不接受,什么也不返回(void),所以Lambda表达式可以写作 () ->Void。 

    Lambda表达式可以传递给一个接受函数式接口作为参数的方法,当然这个Lambda表达式的签名要和函数式接口的抽象方法的签名一样。 

    使用函数式接口

    除了我们日常中用到的Comparator、Runnable等,Java8还在java.util.function 引入了新的函数式接口,比如Predicate、Consumer、Function、Supplier 。

    Predicate

    java.util.function.Predicate<T>接口定义了一个名叫test的抽象方法,它接受泛型 T对象,并返回一个boolean。

    Consumer

    java.util.function.Consumer<T>接口定义了一个名叫accept的抽象方法,它接受泛型T 的对象,没有返回(void)。 

    Function

    java.util.function.Function<T, R>接口定义了一个叫作apply的方法,它接受一个 泛型T的对象,并返回一个泛型R的对象。 

    Supplier

    java.util.function.Supplier<T>接口定义了一个叫作get的方法,它不接受对象,返回一个泛型T的对象。 

    常用的函数式接口

    函数式接口 函数描述符 原始类型特化
    Predicate<T> T->boolean IntPredicate、LongPredicate、DoublePredicate
    Consumer<T> T->void IntConsumer、LongConsumer、DoubleConsumer
    Function<T,R> T->R

    IntFunction<R>、IntToDoubleFunction、IntToLongFunction

    LongFunction<R>、LongToDoubleFunction、LongToIntFunction

    DoubleFunction<R>、ToIntFunction<T>、ToDoubleFunction<T>、ToLongFunction<T>

    Supplier<T> ()->T BooleanSupplier、IntSupplier、LongSupplier、DoubleSupplier
    UnaryOperator<T> T->T IntUnaryOperator、LongUnaryOperator、DoubleUnaryOpertor
    BinaryOperator<T> (T,T)->T IntBinaryOperator、LongBinaryOperator、DoubleBinaryOperator
    BiPredicate<L,R> (L,R)->boolean  
    BiConsumer<T,U> (T,U)->void ObjIntConsumer<T>、ObjLongConsumer<T>、ObjDoubleConsumer<T>
    BiFunction<T,U,R> (T,U)->R ToIntBiFunction<T,U>、ToLongBiFunction<T,U>、ToDoubleBiFunction<T,U>

    行为参数化对常用设计模式的重构

    策略模式

    策略模式定义了一组算法,将它们逐个封装起来,并使它们可以相互替换。

    普通策略模式

    // 修改单策略模式
    interface ModifyContractStrategy {
    	// 参数校验
        boolean paramCheck(ModifyContractSubDTO contractSubDTO, ModifyContractKaFlowReqDTO modifyReqDTO);
    }
    
    
    // 电子修改单策略
    public class ElectronicModifyContractStrategyImpl implements ModifyContractStrategy{
        @Override
        public void paramCheck(ModifyContractSubDTO contractSubDTO, ModifyContractKaFlowReqDTO modifyReqDTO) {
    		// 具体代码参略
        }
    }
    // 纸质修改单策略
    public class PaperModifyContractStrategyImpl implements ModifyContractStrategy{
        @Override
        public void paramCheck(ModifyContractSubDTO contractSubDTO, ModifyContractKaFlowReqDTO modifyReqDTO) {
    		// 具体代码参略
        }
    }

    下面使用lambda表达式来重构

    // lambda-电子修改单策略/纸质修改单策略
    ModifyContractStrategy strategy = (ModifyContractSubDTO contractSubDTO, ModifyContractKaFlowReqDTO modifyReqDTO) -> {
    	// 具体代码省略
    }
    strategy.paramCheck(contractSubDTO, modifyReqDTO);

    另外

    适用于逻辑不复杂,策略实现类过多的场景。

    甚至有时可以考虑将策略实现写在枚举类中。

    模版方法

    如果你需要采用某个算法的框架,同时又希望有一定的灵活度,能对它的某些部分进行改进, 那么采用模板方法设计模式是比较通用的方案。 

    普通模版方法

    操作某个单据的抽象处理模版,若需要使用此类模版,需要继承AbstractHandleShopModifyBusiness并重写checkBusiness、handleBill、executeAfterHandle的方法。

    
    public abstract class AbstractHandleShopModifyBusiness<R extends BaseHandleResultDTO, P extends BaseHandleProcessReqDTO>
            implements HandleProcessBusiness<R, P> {
        /**
         * 功能描述:核心流程处理方法
         *
         * @param reqDTO 入参DTO
         * @return R 处理结果DTO
         * @author lvchengyi
         * @date 17:00 2020/12/1
         */
        protected final R handle(P reqDTO) {
            // 业务校验
            BaseShopModifyCheckDTO checkDTO = checkBusiness(reqDTO);
            // 处理业务
            R handleResult = handleBill(reqDTO, checkDTO);
            // 处理后执行
            if (TransactionSynchronizationManager.isActualTransactionActive()) {
                TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                    @Override
                    public void afterCommit() {
                        executeAfterHandle(checkDTO, handleResult);
                    }
                });
            } else {
                executeAfterHandle(checkDTO, handleResult);
            }
            return handleResult;
        }
    }
    
    

    下面使用lambda表达式来重构这个模版方法

    使用lambda表达式后,如果需要使用模版,不再需要继承抽象类,只需要把对应方法的实现作为参数传入

    protected final R handle(P reqDTO,
                             Function<P, BaseShopModifyCheckDTO> checkBusinessFunction,
                             BiFunction<P, BaseShopModifyCheckDTO, R> handleBillBiFunction,
                             BiConsumer<BaseShopModifyCheckDTO, R> executeAfterHandleBiConsumer) {
        // 业务校验
        BaseShopModifyCheckDTO checkDTO = checkBusinessFunction.apply(reqDTO);
        // 处理业务
        R handleResult = handleBillBiFunction.apply(reqDTO, checkDTO);
        // 处理后执行
        if (TransactionSynchronizationManager.isActualTransactionActive()) {
            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                @Override
                public void afterCommit() {
                    executeAfterHandleBiConsumer.accept(checkDTO, handleResult);
                }
            });
        } else {
            executeAfterHandleBiConsumer.accept(checkDTO, handleResult);
        }
        return handleResult;
    }

    另外

    上面的示例模版处理方法有3个,也不是一定要用行为参数化的方式,毕竟参数过多对于一个方法来说也是不太优雅的。

    是使用继承方式来使用模版方法还是使用行为参数化的方式来使用,还是根据实际情况来考虑。

    工厂模式

    工厂方法模式是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。

    普通工厂模式

    public class HandleProcessFactory {
    
       public Shape getProcess(String process){
          if(process == null){
             return null;
          }
          if(process.equalsIgnoreCase("AGREE")){
             return new Agree();
          } else if(process.equalsIgnoreCase("REJECT")){
             return new Reject();         
          }       
          return null;
       }
    }

    下面使用lambda表达式来重构这个模版方法

    public class HandleProcessFactory {
      final static Map<String, Supplier<HandleProcess>> map = new HashMap<>();
      static {
        map.put("AGREE", Agree::new);
        map.put("REJECT", Reject::new);
      }   
    
      public Shape getProcess(String process){
         Supplier<Shape> shape = map.get(process);
         if(shape != null) {
           return shape.get();
         }
         return null;
      }
    }

    另外

    实际在项目中,对象的创建一般都依赖Spring,不会使用到该类工厂模式来创建。

    结语

    可以用1行代码解决的事,绝对不用3行。写的越多出错的可能也就越大。

     

     

     

    展开全文
  • JAVA设计模式--命令模式目录一、什么是命令式二、命令模式的适用性三、命令模式的结构四、命令模式的优点五、认识命令模式六、总结一、什么是命令式命令(Command)模式又叫作动作(Action)模式或事务(Transaction)模式...
  • 设计模式之命令模式命令模式(Command Pattern):将一个请求封装成一个对象,从而让你使用不同请求把客户端参数化,对请求排队或者记录请求日志,可以提供灵敏撤销和恢复公共能。命令模式类图如下:命令模式...
  • 数字电路的优点是抗干扰能力强、工作稳定,可有效避免因元器件参数变化造成的设备性能下降。采用计算机程序控制后,可以将必要的参数固化在程序中或存储在非易失性存储器中,从根本上解决了因设置基准变化造成的工作...
  • 命令模式是一个高内聚模式,将一个请求封装成一个对象,从而让你使用不同请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令撤销和恢复功能。命令模式通用类图如下:eceiver接收者角色,主要...
  • 作为一种数字伺服执行元件,步进电机具有结构简单、运行可靠、控制方便、控制性能好等优点,广泛应用在数控机床、机器人、自动仪表等领域。为了实现步进电机简易运动控制,一般以单片机作为控制系统微处理器,...
  • 数字电路的优点是抗干扰能力强、工作稳定,可有效避免因元器件参数变化造成的设备性能下降。采用计算机程序控制后,可以将必要的参数固化在程序中或存储在非易失性存储器中,从根本上解决了因设置基准变化造成的工作...
  • 首先看下GOF对命令模式定义:将一个请求封装为一个对象,从而使你可用不同请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。命令模式主要应用于将行为调用者与实现者解耦。比如我们以前...
  • 前在全世界范围内,由于化石能源的不可再生和人类的过度开采,全球的能源危机已经初现端倪,为此世界各国竞相发展绿色能源,太阳能凭借其独特的优点,受到了一致的青睐,在太阳能的各种应用中,光伏发电应用倍受...
  • 圆极天线具有可接收任意极电磁波的优点而被广泛使用,为满足通信需求,宽带圆极天线应运而生。 通过对矩形贴片天线进行结构调整得到一种新型宽带圆极天线,使用电磁仿真软件 CST 对此天线进行全波时域...
  • 命令模式就是将一个请求封装为一个对象,从而可用不同请求对客户进行参数化;对请求排队或记录日志,以及支持可撤销操作,将”发出请求对象”和”接收与执行这些请求对象”分隔开来。下面小编详细很大家谈谈...
  • TrafficServer的优点·高可用性—多种管理界面,可管理程度高—容灾设计,可消化常见硬件故障—快速启动,快速恢复—配置可定制程度高,可控制核心参数500+条目—Cache控制能力强—可定制的日志采集汇总汇报系统—...
  • Struts2的优点

    2013-08-26 12:20:26
    ①在软件设计上Struts2应用可以不依赖于ServletAPI和StrutsAPI,Struts2这种设计属于无侵入式设计; ②拦截器,实现了如参数拦截等功能; ③类型转换器,可以把特殊请求参数类型转换成需要类型; ④多种...
  • 泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型指定推迟到客户端代码声明并实例该类或方法时候。例如,通过使用泛型类型参数 T,您可以编写...
  • 为了降低参数化模型对测量结果影响,提出一种不依赖相机内部参数摄影测量方法。结合垂线法和Zeiss实验室标定方法,设计了一种针对大视场相机非参数标定方法。经过不同图像间同名点匹配和平差初值确定后,便可...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,087
精华内容 434
关键字:

参数化设计的优点