前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之笔记

设计模式之笔记

作者头像
用户1518699
发布2019-10-29 23:35:53
3180
发布2019-10-29 23:35:53
举报
文章被收录于专栏:nice_每一天nice_每一天

设计模式—策略模式

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

代码语言:javascript
复制

设计模式—装饰模式

定义:在不改变原有对象的基础上,扩展很多功能 使用场景:网关+日志记录+接口限流+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

代码语言:javascript
复制

设计模式—责任链模式

定义:责任链是一种动态的行为模式。是由每一个对象对下家的引用,形成一个链条。请求在链条上运行,直到某一个对象处理这个请求。 客户端并不知道那个链条处理此请求,使系统能动态的组织和分配责任。 责任链模式实现原理 * 我们用财务审批流程来阐述实现原理 * 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); 获取当前责任对象并处理请求。 * * 总结:责任链的执行过程对外是不可见的。对于用户来说只知道请求被处理了,而不知道被谁处理了。每一个责任链 * 的执行者都会有下一个执行者,直至请求被处理了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设计模式—策略模式
  • 设计模式—装饰模式
  • 设计模式—责任链模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档