
行为型
文章平均质量分 87
负责对象之间的高效沟通和职责委派
code_Floyed
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
职责链模式(Chain of Responsibility Pattern)
学校OA系统的采购审批项目: 需求是 1.采购员采购教学器材 2.如果金额小于等于5000,由教学主任审批 3.如果金额小于等于10000,由院长审批 4.如果金额小于等于 30000, 由副校长审批 5.如果金额超过30000,由校长审批 传统方案: 碰到金额,根据数目调用相对应的采购员传统方案解决 OA 系统审批问题分析 1.传统方式是 :接收到一 个采购请求后,根据采购金额来调用对应的 Approver ( 审批人 完成审批)。 2.传统方式的问题分析原创 2021-07-11 12:53:06 · 247 阅读 · 1 评论 -
策略模式(Strategy Pattern)
鸭子问题 1.有各种各样的鸭子,eg:野鸭,北京鸭,水鸭 2.鸭子有各种行为:叫、飞行 3.显示鸭子信息 传统方案Duck 野鸭 北京鸭 水鸭传统的方式实现的问题分析和解决方案 1.其它鸭子,都继承了 Duck 类,所以 fly 让所有子类都会飞了,这是不正确的 2.上面说的1的问题,其实是继承带来的问题:对类的局部改动,尤其超类的局部改动,会影响其他部分,容易引起溢出效应。 3.为了改进1问题,我们可以通过覆盖fly方法来解决 => 覆盖解决&原创 2021-07-11 12:47:45 · 242 阅读 · 1 评论 -
状态模式(State Pattern)
抽奖问题 1.每参加一次抽奖需要50积分,中奖概率10% 2.奖品数量有限,没有即止 3.抽象由4个状态:可以抽奖、不能抽奖、发放奖品、奖品领完。状态模式 状态模式:它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类状态模式结构 1.上下文 (Context) 保存了对于一个具体状态对象的引用, 并会将所有与该状态相关的工作委派给它。 上下文通过状态接口与状原创 2021-07-11 12:43:20 · 198 阅读 · 1 评论 -
解释器模式
四则运算问题计算a+b-c 要求: 先输入表达式的形式,eg:a+b+c-d+e,并且字母不可重复 分别输入 a,b,c,d,e 计算出结果 传统方案 编写方法,来接受根据数据输入的数值进行解析,得出结果>问题分析: 如果加入新的运算符,比如 * /。 则不利于扩展,另外让一个方法来解析会造成程序结构混乱 解释器模式 1.在编译原理中一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的原创 2021-07-10 12:08:19 · 137 阅读 · 1 评论 -
备忘录模式
游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战 Boss 前保存自 身的状态攻击力和防御力当大战 Boss 后攻击力和防御力下降, 从备忘录对象恢复到大战前的状态 传统方案对象 <-> 对象状态对象 <-> 对象状态对象 <-> 对象状态传统方式的问题分析 1.一 个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大 2.传统的方式是简单地做备份(new 出另外一个对象出来),再把需要备份的数原创 2021-07-10 12:05:36 · 145 阅读 · 2 评论 -
中介者模式
智能家庭 智能家居有许多。当你起床时,你希望各个设备能够协同做一些事情。 比如:闹钟响起->音响播放音乐->空调关闭 传统方案:问题: 当有多种电器时,相互之间的调用关系会比较复杂。不利于松耦合。 各个对象之间传递的内容容易混乱 当系统中途增加一个电器对象,或者执行流程改变,则需要改动代码较大,不利于系统的可维护性、扩展性。 中介者模式 用一个中介对象来封装一系列的对象交互。则中介者可以使各个对象不需要显示地相互引用,从而松耦合,又可以独立地改变它原创 2021-07-10 12:01:52 · 108 阅读 · 1 评论 -
观察者模式
天气预报: 1.天气站可以将每天测量的温度,湿度,气压等等以公告的形式发布出去 2.如果设置开放型API,则第三方的应用也可接入气象站获取数据 3.提供温度、气压和适度的接口。 4.测量数据更新时,要实时的通知第三方 普通方案1: 通过getxxx的方法,直接让第三方接入,并获取相关信息。 当数据变化时,气象站使用dataChange()来更新数据。那么第三方再次获取时,就能得到最新数据。 普通方案2: 当dataChange时,则通知给第三方的upda原创 2021-07-10 11:58:00 · 174 阅读 · 0 评论 -
迭代器模式
展示学校院系系统 展示学校院系系统,展示一个学校要多少学院、一个学院有多少个系。 迭代器模式 提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要指导集合对象的底层。 当我们集合元素是用不同的方式实现,比如数组、集合类等,当客户端需要遍历时,便会使用多种迭代方法,则容易暴露元素的内部结构,此时便可考虑迭代器模式 迭代器模式结构 1.迭代器 (Iterator) 接口声明了遍历集合所需的操作: 获取下一个元素、 获取当前位置和重新开始迭代等。 2.具体迭代器原创 2021-07-09 15:47:28 · 99 阅读 · 0 评论 -
访问者模式
评测系统的需求 当电影播放完后,通常人们都会对其进行评价。评价有三种状态:成功、失败、待定。而观众分为男人、女人。 传统方案 Person ->Woman ->Man 问题: 若要增加新功能时,对代码改动较大。 扩展性不好,比如增加新的人员类型,新的管理方法。 访问者模式 封装一些作用于某种数据类型的各元素的操作,它可以在不改变的前提下定义作用于这些元素的新操作。 主要将数据结构与数据操作分离,有利于解决数据结构和操作耦合性的问题原创 2021-07-09 15:44:23 · 116 阅读 · 0 评论 -
命令模式的学习
智能生活需求: 每个品牌都有着各自的智能家居。而你想操作不同牌子的智能家居只能通过不同品牌的App进行控制。 我们能否通过一个App就可以控制全部的智能家居。这便要求每个智能家具厂家提供一个统一接口给App调用。 命令模式 在软件设计中,经常需要向某些对象发生请求,但是并在不知道接收者是谁,也不知道被请求的操作是哪个,那么我们只需要在程序运行时指定具体的请求接收者即可。 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参原创 2021-07-09 15:39:56 · 154 阅读 · 0 评论 -
模板方法的学习
豆浆制作问题 1.流程:选材 添加配料 浸泡 放入豆浆机搅碎 2.通过添加不同的配料,可以制作不同口味的豆浆 3.其中选材、浸泡、放入豆浆机搅碎对于制作每一种口味的豆浆机都是一致的。模板方法模式 公开它方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类定义的方式进行。 即定义了一个操作中的算法骨架,将一些步骤的实现延迟给子类,使得子类可以在不改变一个算法的结构,便可定义某些特定步骤。 模板方法模式结构 1.抽象类 (AbstractCla原创 2021-07-09 15:35:56 · 112 阅读 · 0 评论