摘要:
概念 一个卖车的店铺,车的价格是根据人群决定折扣的,比如学生买车就5折,工人买车就9折。 如果是平时的做法,就会判断是什么人来买车,再决定打多少折扣,这样的设计并不理想,因为有可能下次是自己的亲戚买车,或者其他什么人买车等等,会导致车的这个类频繁修改。 为了解决车这个类频繁修改的问题,可以使用访问者 阅读全文
摘要:
概念 迭代器主要用在集合的遍历。我们无需关心集合的底层是什么数据结构,直接使用集合中的迭代器即可达到遍历的效果。 不是有for循环吗?为什么还需要迭代器? 迭代器更像是面向对象的方式,用户只需关注拿到迭代器这个对象,就可以使用迭代器遍历这个对象的内部数据 实现方式 /** * 迭代器 */ publ 阅读全文
摘要:
概念 对一个对象生成一个新的代理对象,代理对象具备原对象的功能,且能对原对象的功能进行增强。很像装饰模式,但是装饰模式只是把对象的某个方法进行增强,而代理模式把整个对象的所有方法都增强。 例如:每个人都会睡午觉,也会睡晚觉。我现在希望每个人睡午觉的前后都刷牙,睡晚觉的前后也都刷牙 实现方式 JDK代 阅读全文
摘要:
概念 享元模式用于减少创建对象的数量,以减少内存占用和提高性能。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。 享元模式用得比较多的是池化技术,如常量池,线程池,连接池等等。 java中的常量池使用的就是享元模式。比如String s = "abc",会先去常量池中找是否有"a 阅读全文
摘要:
概念 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。组合模式说白了就是一个树形结构。如某商城的商品分类,如省市区等结构,这些都是树形结构,都属于组合模式。 实现方式 import java.util.ArrayList; import java.util.List; /** * 组合 * 阅读全文
摘要:
概念 定义对象之间的一对多依赖关系(一个被观察者,多个观察者),当被观察者的状态发生改变时,所有的观察者都得到通知。也称为发布-订阅模式。 吃蛙来哒需要在大众点评APP叫号排队,有A/B/C三人都在大众点评APP叫号,等待APP通知什么时候去吃蛙来哒。那么APP与A/B/C三人就形成了一对多的依赖关 阅读全文
摘要:
概念 责任链中,每个层级都有自己的上一个层级,当自己处理不了时,把任务丢给上级处理。 责任链有点类似于Http请求的转发功能。用户只需要关注直接和自己对接的人,无关心后边具体的流程 张三找A借100块钱,A自己刚好身上有100块,于是A就借给了张三。下次张三又来找A借10万块钱,由于A没有那么多钱, 阅读全文
摘要:
概念 装饰模式使用在不改变对象原有的功能基础上,对原有的功能进行增强。 例如:一个机器人只会扫地,我希望机器人在扫地的同时,它还能够唱歌。这种场景就很适合装饰模式,在不改变原有的功能基础上,对原有的功能增强 前提:装饰类与被装饰类都实现相同的接口。装饰类中有一个构造方法,构造方法中需要传入被装饰类。 阅读全文
摘要:
概念 中介者模式能减少对象之间胡乱无序的依赖关系,该模式会限制对象之间的直接交互,迫使他们通过一个中介者对象进行合作。 消息队列就是一个典型的中介者模式,A/B/C都可以往消息队列发消息,也可以接收消息队列的消息,A/B/C的合作必须通过消息队列来完成 想要相亲,必须找个媒婆,媒婆负责给两人搭线。如 阅读全文
摘要:
概念 去医院看病,可能要去挂号、门诊、划价、取药,让患者觉得很复杂。如果有提供接待人员,患者只要和接待员沟通,剩下的交给接待员来处理,这样就会方便很多。 再例如某商城展示的数据很多,前端可能调用10个接口才能拿到所有首页的数据。如果后台能前端提供一个接口,并在该接口中调用其他10个接口组装数据,再把 阅读全文