• 设计模式之笔记


     

    设计模式—策略模式

    定义:定义一系列的算法,将算法进行封装、隔离、相互独立、又能相互替换
    使用场景:第三方支付方式选择、底层多套API的调用
     * 支付实现原理:
     * 1.定义支付服务接口PayService ,里面有一个payHtml方法,供选择某种支付方式
     * 2.定义具体的支付方式实现类,例如:阿里支付、微信支付、银行卡支付..。该类继承PayService接口
     * 3.定义枚举 PayContentConstant。code是支付别名,className是具体支付方式实现类的类名
     * 4.定义支付上下文PayContent,定义一个变量payServiceHashMap用于存储当前所有的支付方式。当Spring扫描该类的时候,
     * 后将所有的支付方式注入到当前的Map中。定义一个payHtml方法用于让用户选择那种支付方式,根据支付方式去跳转到某一支付页
     *
     * 策略模式条件:
     * 某一抽象接口服务(支付接口)、N个具体接口服务(具体支付方式)、枚举或者常量(存储支付方式与对应的支付实现关系)、
     * 支付上下文(满足用户选择某种支付方式)



    设计模式—装饰模式

    定义:在不改变原有对象的基础上,扩展很多功能
    使用场景:网关+日志记录+接口限流+API鉴权等
     * 装饰实现原理:
     * 1.定义一个厂家Producer ,它具有生产的功能
     * 2.定义一个厂家具体执行者ConcreteProducer,它主要负责组装购买需要的配件
     * 3.定义一个汽车生产者 CarProducer,主要负责生产汽车
     * 4.该汽车生产者,负责生产本田汽车(HondaProducer)与宝马汽车(BmwProducer)
     * 5.定义生产线ProductLine,里面有N个生产线,比如 carProductLine生产线,也就是汽车生产线。
     * 它的执行顺序为 出场检验-宝马生产-本田汽车生产
     *
     * 装饰条件:
     * 某一个抽象的接口服务(厂家服务)、基础功能实现(配件生产者)、装饰者(汽车生产者)、具体装饰者1、具体装饰者2、
     * 具体装饰者N..
     *
     * 总结:首先定义一个抽象的接口作为父类。将基础的功能或者不变的功能抽离作为父类的一个执行者。
     * 定义装饰者A,装饰者A下有:具体的装饰者A1、具体的装饰者A2、具体的装饰者A2
     * 定义装饰者B,装饰者下有B:具体的装饰者B1、具体的装饰者B2、具体的装饰者B2
    
    

    设计模式—责任链模式

    定义:责任链是一种动态的行为模式。是由每一个对象对下家的引用,形成一个链条。请求在链条上运行,直到某一个对象处理这个请求。
    客户端并不知道那个链条处理此请求,使系统能动态的组织和分配责任。
    责任链模式实现原理
     * 我们用财务审批流程来阐述实现原理
     * 1.定义一个抽象的父类BaseHandler,在BaseHandler中定义个BaseHandler变量,定义BaseHandler变量的getter和setter方法
     * 用于获取与设置当前对象。在BaseHandler中定义一个财务审批的方法 void handlerMoney(int money)
     * 2.定义三个处理者 TemManager(团队经理)、GeneralManager(总经理)、FinanceManager(财务经理)。三者均继承BaseHandler
     * 来处理报销请求。假设 TemManager的下一个处理者为GeneralManager、GeneralManager下个处理者为FinanceManager。FinanceManager
     * 无下个处理者。TemManager能处理的金额为<=2000,GeneralManager能处理的金额为<=20000,FinanceManager能处理的金额为<=200000* 每一个处理者,超出处理范围传递给下一个处理者。超出200000,FinanceManager将不通过。
     * 3.那么如何设置下一个处理者呢?例如TemManager的构造器
     * public TemManager(BaseHandler baseHandler) {
     *  this.setBaseHandler(baseHandler);
     * }
     * 当前方法设置下一个处理者,而通过getBaseHandler().handlerMoney(money);
     * 将把责任交给下一个处理者,直至处理结束。
     *
     * 条件:一个抽象责任父类接口(BaseHandler)、N个具体责任执行者(TemManager)、初始化责任执行者必须设置
     * 下一个执行者。也就是 new TemManager(下一个执行者)。
     * 通过this.setBaseHandler(baseHandler);设置当前责任对象
     * 通过getBaseHandler().handlerMoney(money); 获取当前责任对象并处理请求。
     *
     * 总结:责任链的执行过程对外是不可见的。对于用户来说只知道请求被处理了,而不知道被谁处理了。每一个责任链
     * 的执行者都会有下一个执行者,直至请求被处理了。
  • 相关阅读:
    perf-stat
    perf原理
    ubuntu中Docker的安装与使用
    NVM相关手册及新特性理解
    #2018BIT软件工程基础#结对项目:四则运算题目生成
    #2018BIT软件工程基础#个人项目:数独
    第一篇博文:自我介绍&新学期展望
    越早明白这些道理,越能少走一些弯路
    把知识连接起来就是创意
    【翻译】24款界面精美的免费UI工具包
  • 原文地址:https://www.cnblogs.com/IT-study/p/11755705.html
Copyright © 2020-2023  润新知