随笔分类 -  设计模式

该文被密码保护。
posted @ 2018-09-01 14:47 rorshach 阅读(2) 评论(0) 推荐(0)
摘要:功能: 给指定用户发送邮件 将客户端ip写入ftp防火墙白名单 为什么要用命令模式实现?策略模式,状态模式难道不可以吗? 此处给用户发邮件和将IP写入白名单是两个不同的操作. 策略模式是不同策略可以相互替换,这儿显然不能替换,因为对应的功能不同. 命令请求者内部没有维护一个状态的必要.所以状态模式也 阅读全文
posted @ 2018-04-08 09:18 rorshach 阅读(1915) 评论(0) 推荐(0)
摘要:功能: 统计一组用户的银两和金币. 一.用户接口和实现 二.访问者接口和实现 三.调用: 阅读全文
posted @ 2018-04-07 21:44 rorshach 阅读(213) 评论(0) 推荐(0)
摘要:功能: 显示用户及该用户推广进来的下属两级用户 一.User类 二.User类的装饰类(装饰类主要实现对User对象信息的更友好的显示) 三.组合模式 1.抽象构件 2.一级用户:枝节点 3.二级用户:叶节点 四.迭代器 五.调用 输出: 阅读全文
posted @ 2018-04-07 18:10 rorshach 阅读(220) 评论(0) 推荐(0)
摘要:实现功能: 用户发布的一部电影在审核时,和审核通过后,对应的操作各不相同. 一.定义两个异常 二.定义一个数据类(模拟从数据库获取数据) 三.定义状态接口 四.定义一个虚拟电影基类 五.定义等待审核状态的电影 五.定义审核通过后的电影 六.状态上下文类 七.调用 阅读全文
posted @ 2018-04-07 15:22 rorshach 阅读(430) 评论(0) 推荐(0)
摘要:功能: 扣除用户金币,写入明细,并发送消息 以上三个动作任意一个动作失败,则请求终止 一.定义一个异常类: 二.定义一个虚拟类: 三.用户金币类: 四.金币明细类: 五.发送消息类: 六.调用 我们手动设置了每个责任类的下一链,我们还可以建立一个上下文类,来统一管理一系列的动作;关键性更改如下: 取 阅读全文
posted @ 2018-04-06 21:44 rorshach 阅读(561) 评论(0) 推荐(0)
摘要:实现功能: 扣除用户金币及写入金币明细,这是同一个行为,使用外观模式 金币明细需要多个参数来保证对象的完整,参数过多,所以使用建造模式 一.用户明细类 二.用户明细建造者类 三.用户类: 四.扣除用户金币外观类 五.调用 阅读全文
posted @ 2018-04-06 21:17 rorshach 阅读(174) 评论(0) 推荐(0)
摘要:实现功能: 依据类的cache属性,对数据表的读要缓存起来,对数据表的写需要清除缓存. 数据表根据属性字段来决定是否缓存 可以更换数据库链接方式,比如可以随时更换为mysql或mysqli() 当插入数据时给出一个通知或者提示,可以外部配置通知 一.数据操作接口 二.数据库实现类(单例模式) 1.m 阅读全文
posted @ 2018-04-06 20:17 rorshach 阅读(706) 评论(0) 推荐(0)
摘要:实现功能: 1.用户金币或银两达到一定数额后,可以用相应数量的金币或银两开通推广功能,开通推广功能后,由此产生的收益归该用户所有 2.推广类,不允许直接操作推广类,需要判断用户是否有金币或银两来开通,所以使用代理类. 3.用户可以用银两也可以用金币来开通,所以使用策略模式或简单工厂模式;就系统目前而 阅读全文
posted @ 2018-04-06 16:40 rorshach 阅读(359) 评论(0) 推荐(0)
摘要:实现功能: 1.用户A向用户B打赏金币 2.减少用户A的金币,并写入金币明细表 3.增加用户B的金币,并写入金币明细表 4.给用户B发送一个打赏通知 ps:本文中的同事,并非是指该类为同事,而是沿用中介者模式中的称呼.与中介者打交道的各个类. 一.虚拟同事类: 二.虚拟用户类,继承虚拟同事类 三.创 阅读全文
posted @ 2018-04-06 16:10 rorshach 阅读(441) 评论(0) 推荐(0)
摘要:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. UML: 示例代码: 阅读全文
posted @ 2017-11-06 10:07 rorshach 阅读(202) 评论(0) 推荐(0)
摘要:提供了一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 适用场景:当你需要访问一个聚合对象,而这个对象不论是什么,你都需要遍历的时候,就用迭代器. UML: 示例代码: 阅读全文
posted @ 2017-11-06 09:39 rorshach 阅读(179) 评论(0) 推荐(0)
摘要:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态 UML: 示例代码: 如果只有一个备忘录,可以取消备忘录管理者. 阅读全文
posted @ 2017-11-06 09:32 rorshach 阅读(170) 评论(0) 推荐(0)
摘要:用一个中介对象来封装一系列的对象交互,中介者使得各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互. 减少了各对象之间的耦合,使得可以独立的改变或复用各个Mediator或ColleagueMediator控制了交互,导致Mediator变的复杂 ps: 各个同事类需要知 阅读全文
posted @ 2017-11-06 09:25 rorshach 阅读(171) 评论(0) 推荐(0)
摘要:表示一个作用于某对象结构中各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 适用场景:1.适用于元素类数据结构相对稳定(类的方法固定,但属性可以变化,如果方法变化很大,就无法使用访问者)2.把数据的处理从数据结构上分离出来.3.需要一个结构对象角色,组合一系列的元素类. 阅读全文
posted @ 2017-11-06 08:48 rorshach 阅读(178) 评论(0) 推荐(0)
摘要:将一个请求封装成一个对象,从而可以用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作. 与状态模式和责任链模式的区别是,命令模式设定一次,统一执行 使用场景:1.可设计一个队列2.较容易将命令计入日志3.允许接收的一方是决定是否否决请求4.可以实现对请求的撤销和重做5. 阅读全文
posted @ 2017-11-06 08:12 rorshach 阅读(183) 评论(0) 推荐(0)
摘要:使多个对象都有机会处理处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着该链处理请求,直到有一个对象能够处理它为止. 相当于switch/case,在客户端指定了每一链的下一链. UML 示例代码: 这个手动设置下一处理者,还是有点不方便.有时候设置出错,容易导致死循 阅读全文
posted @ 2017-11-06 07:54 rorshach 阅读(268) 评论(0) 推荐(0)
摘要:它定义了算法家族,分别封装起来,让他们之间可互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML 示例代码: 阅读全文
posted @ 2017-11-05 21:11 rorshach 阅读(164) 评论(0) 推荐(0)
摘要:当一个对象内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.状态模式主要解决当控制一个对象状态转换条件表达式过于复杂时的情况,把状态判断逻辑移到表示不同状态的一系列类中.如果状态判断很简单,就没有必要用这个模式了. 1.相当于面向过程中的if/else,状态模式在每个独立的状态类中实现判断 阅读全文
posted @ 2017-11-05 21:03 rorshach 阅读(162) 评论(0) 推荐(0)
摘要:定义了一种一对多的依赖关系,多个观察者对象同时监听某一主题的变化,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们可以更新自己. 应用场景:某个实例的变化影响到了其他对象. UML: 示例代码: 阅读全文
posted @ 2017-11-05 20:56 rorshach 阅读(168) 评论(0) 推荐(0)