1.观察者模式与发布订阅模式
1.1 概念
很相似,但是有区别,暂时不做区分.
定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(subject)的状态发生改变时,
所有依赖于它的对象都得到通知并自动更新。--《设计模式》
1.2 意义
(1)在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”-> 一个对象(目标对象)的
状态发生改变,所有的依赖对象(观察者对象)都将得到通知.如果这样的依赖关系过于紧密,将使软件不
能很好地抵御变化.
(2)松耦合,使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系
结构的松耦合.
1.3 模型
分为推模型和拉模型.
1.3.1 推模型
目标对象主动向观察者推送目标的详细信息,不管观察者是否需要,推送的信息通常是目标对象的全部或
部分数据,相当于广播通信。
1.3.2 拉模型
目标对象在通知观察者的时候,只传递少量的信息。如果观察者需要更具体的信息,由观察者主动到目标
对象中获取,相当于是观察者从目标对象中拉数据。一般这种模型的实现中,会把目标对象通过update方
法传递给观察者,这样在观察者需要获取数据的时候,就可以通过这个引用来获取了.
1.3.3 实例理解
拉模型中也会存在推模型中的内容,只不过粒度很小,比如说在我们订阅一个公众号的时候,如果公众号
将它的内容全部推荐给我们,我们可以将其看做推模型.如果公众号仅仅将它的文章的标题推送给我们,
我们可以讲这个看作是拉模型中的小粒度推送,如果我们对公众号推送给我们的一个标题很感兴趣,我们
点开了文章,那么可以将其看做是拉模型中的客户端主动去拉取内容.
以上我们可以看到有如下的大致认同,
大粒度的推送--推模型中的推动作--服务器端
小粒度的推送--拉模型中的推动作--服务器端
拉取推送内容--拉模型中的拉动作--客户端
1.4 代码的简单演示
2.工厂模式
2.1 什么是工厂模式
2.5 OCP(开发封闭原则)
定义
开闭原则,英文缩写OCP,全称Open Closed Principle。
原始定义:Software entities (classes, modules, functions) should be open for extension but
closed for modification。
字面翻译:软件实体(包括类、模块、功能等)应该对扩展开放,但是对修改关闭。
为什么要“开”和“闭”
一般情况,我们接到需求变更的通知,通常方式可能就是修改模块的源代码,然而修改已经存在的源代码是存在
很大风险的,尤其是项目上线运行一段时间后,开发人员发生变化,这种风险可能就更大。所以,为了避免这种
风险,在面对需求变更时,我们一般不修改源代码,即所谓的对修改关闭。不允许修改源代码,我们如何应对需
求变更呢?答案就是我们下面要说的对扩展开放.
通过扩展去应对需求变化,就要求我们必须要面向接口编程,或者说面向抽象编程。所有参数类型、引用传递的
对象必须使用抽象(接口或者抽象类)的方式定义,不能使用实现类的方式定义;通过抽象去界定扩展,比如我
们定义了一个接口A的参数,那么我们的扩展只能是接口A的实现类。总的来说,开闭原则提高系统的可维护性和
代码的重用性.