摘要: 什么叫备忘录?两个字,回滚。备忘录模式可以记录一个对象的内部状态,当需要的时候可以将对象恢复到之前的状态 备忘录模式有三个角色:发起者,备忘录,管理者。简而言之,发起者对对象发生改动的时候自己备份一份备忘录交给管理者。每次发起者需要恢复数据的时候找管理者,管理者找出备忘录的数据交给发起者。 发起者只 阅读全文
posted @ 2020-04-28 17:27 Vinlen 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 迭代这个词不陌生,List,Set,Map等等都有迭代器。所谓的迭代器就是访问该聚合对象中的各个元素。比如链表遍历。如果将该链表的创建和遍历都放在一个类中那肯定是不行的,如果要更改遍历方法就得修改源码,这违反了开闭原则。如果类不提供遍历方法,由用户自己实现也是不可以的,因为这样会暴露聚合类的内部表示 阅读全文
posted @ 2020-04-28 16:40 Vinlen 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 在现实中,你要和天南海北的朋友聊天需要中介,QQ,微信,信息等等这些都是中介工具。中介工具的作用就是把同一类的人放在一起(群),一个发送消息的时候,需要通知其他人 java中的中介者模式有四个角色:抽象中介者,具体抽象者,抽象角色,具体角色。 抽象中介者(群的概念) abstract class M 阅读全文
posted @ 2020-04-28 15:58 Vinlen 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 在现实生活中,一个对象的改变会引起其他许多对象的改变,比如商品降价了,很多人都会开心,明天要下雨,很多人会烦躁等等。在java里就是一对多的依赖关系,当某个对象发生改变时,需要通知所有依赖于他的对象更新。这种模式有的时候也被叫做订阅-发布模式。 观察者模式有四种角色:抽象主题,具体主题,抽象观察者, 阅读全文
posted @ 2020-04-28 15:29 Vinlen 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 人愤怒的时候会想打人,高兴的时候想笑,人的状态执行了不同的方法,程序也是一样,程序也有状态。当一个方法里需要多个if else来判断逻辑的时候就要注意到,当对象的状态很多时,程序会变得很复杂,而且添加新状态就会增加新的if else语句,大大违反了开闭原则 我们可以使用状态模式,来为程序定义不同的状 阅读全文
posted @ 2020-04-28 11:40 Vinlen 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 最典型的就是击鼓传花了,一个传一个,等到适合的人接到。在程序里就是请求者不可以和多个接收者耦合在一起,将所有请求的处理者根据前一对象记住下一个对象的引用形成一条责任链,将请求沿着责任链传递,一直到负责处理请求的对象出现 责任链模式有三个角色,抽象处理者,具体处理者,客户类。抽象处理者定义一个处理请求 阅读全文
posted @ 2020-04-28 11:01 Vinlen 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 先看一下策略模式的三个角色: 抽象策略:仅提供一个抽象方法,环境类调用抽象策略的方法,根据实际应用情况由适合的具体策略对象去实现 具体抽象:负责实现抽象策略定义的接口 环境类:环境类负责引用抽象策略,并交给客户端来使用。 简单来说就是客户端调用环境类,环境类调用抽象策略,具体的算法由不同的具体策略来 阅读全文
posted @ 2020-04-28 10:17 Vinlen 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 树枝和树干组成了树,就用树枝和树干来讲解一下组合模式。 一个组合模式有3种角色,抽象构件,类似于树干,定义了基本方法;树枝构件,用于管理树叶;树叶构件,用于具体实现。 先来看一个例子 学生: interface Student { void add(Student s); void remove(S 阅读全文
posted @ 2020-04-28 09:45 Vinlen 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 享元模式:相同的对象只保存一份,降低了因为大幅创建相同对象来对系统的额外开销 享元模式分为4个角色,非享元对象,抽象享元角色,具体享元角色,享元工厂。非享元角色是享元角色的一个参数,如果需要经常需要调用非享元对象,可能会创建很多的享元角色,这时候可以从享元工厂里获取具体的享元角色,使用一个map存放 阅读全文
posted @ 2020-04-28 08:57 Vinlen 阅读(109) 评论(0) 推荐(0) 编辑