前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漫谈模式之基于抽象与多态的模式变形思考

漫谈模式之基于抽象与多态的模式变形思考

原创
作者头像
孟君
发布2023-05-14 19:17:02
2750
发布2023-05-14 19:17:02
举报
文章被收录于专栏:孟君的编程札记

较早以前,一个小伙伴问我:“孟君,这么多设计模式的结构你是怎么记住的?我好像老是忘记”。回想一下,我上次特意去记忆应该是大学备战设计模式课程考试的时候。

其实,随着自己对设计原则理解的加深,以及工作经验的沉淀,好多设计模式的主要结构是很容易画出来的。因为,到后面,你会发现好多模式是在抽象和多态的基础上,基于不同的目的不断变化过来。

本文,我抛砖引玉一下,分享一点小小的经验。

问题:如何不修改源代码改变它的行为?也即,对扩展开放,对修改封闭。

答案就是:抽象与多态

抽象可以满足扩展,多态支持个性化。接下来,我们来看看他们的魔法效果吧。接下来,将下图作为讲解的基础结构。

基于抽象和多态的模式变形

策略模式

在此基础上,如果增加一个上下文Context,上下文还包含一个方法来设置当前要使用的具体策略,这使得客户端可以根据需要轻松地更改算法的行为。

这样就形成了策略模式。

责任链模式

在此基础上,如果Handler需要指定后继(succesor),形成一个链

这样就形成了责任链模式。

组合模式

如果具体的节点,分为叶子结点组合结点(组合结点为树形结构),

这样就形成了组合模式。

代理模式

如果想对具体的主题进行访问控制。增加一个Proxy,其方法调用真实主题的方法,不过前后可以补充内容,比如记录操作时间或者判断是否有数据权限等。

这就形成了代理模式。

装饰者模式

装饰模式的思考和代理差不多,换成装饰器,每个具体装饰器可以增加新的方法用于增强,大家可以思考一下。

模版方法模式

如果具体的实现有相关的步骤,比如:有不同渠道去扣税,每个渠道的输入报文各不相同,但是,其大致的流程有类似性:

这样的场景,基类里面可以定义一个模版方法(指定按照步骤执行的方法),个性化的方法,用abstarct修饰,并由子类具体实现。

这就形成了模版方法模式。

桥接模式

如果左边图形的抽象,以及右侧涂色的实现,通过复合的关系关联起来,这样就形成了桥接模式。

本文先给出几个,让大家感受一下。

有兴趣的读者,还可以使用相同的套路继续去思考其他的模式,比如,状态模式、访问者模式、解释器模式等等。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于抽象和多态的模式变形
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档