讨论的设计模式:
a、模板方法
b、观察者模式
c、策略模式
d、单例模式
e、工厂模式
f、抽象工厂
g、责任链
h、装饰器
模板方法:
定义: 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。
要点: 子类用于复写父类的子流程,使得父类流程更加丰富;子类复写的方法一般只给父类调用所以复写的方法一般是父类的protected函数。
本质:固定父类的调用子流程的骨架,同时使得子流程可以扩展。
结构图:
观察者模式:
定义:定义对象间的一种一对多的依赖关系。以便当一个对象的状态发生变化的时候,所有依赖于它的对象都得到通知并且自动更新。
要点:观察者模式使得观察者与目标可以相互独立。观察者可以自由选择是否订阅目标,目标只知道有观察者订阅了,但不知道具体的观察者对象。
本质:目标触发条件,联动观察者
结构图:
策略模式:
定义:定义一系列算法,把他们一个个封装起来,并且使它们可以相互替换。该模式使得算法可独立于使用它的客户程序而变化。
要点:策略模式提供了一系列可重用的算法,从而可以使得类型在运行时方便地给根据需要在各个算法之间进行切换;策略模式消除了条件判断语句。
本质:分离算法,选择实现。
结构图:
单例模式:
定义:保证一个类仅有一个实例,并提供一个该实例的全局访问点。
要点:利用函数里面的静态变量来左单例对象。用模板类定义父类单例,然后子类继承这个父类,这样子可以复用代码。
结构图:
工厂模式:
定义:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使得一个类的实例化延迟到子类。
要点:当具体类型的对象的创建比较复杂,那么就可以通过工厂方法来封装来隐藏创建细节。隐藏对象的真实类型,使得使用者只需知道类的职责。
结构图:
抽象工厂:
定义:提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。
要点:把对象的相关性和依赖性封装到具体的工厂里面,抽象工厂只是提供对应职责的接口。抽象工厂可能有多个职责,但是多个职责可能是相关的或者相互依赖的。
结构图:
责任链:
定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
要点:责任链的每个处理对象都应该抽象出判断能否处理的方法和处理请求的方法。责任链把请求处理流程固定住(一个对象能否处理处理,可以就自己处理,否则就交给下一个处理,这就是稳定点),扩展的就是能否处理的判断依据、处理请求的具体方法和链条的长度。
本质:分离职责,动态组合
结构图:
装饰器:
定义:动态地给一个对象增加额外的职责。就增加功能而言,装饰器模式比生产子类更为灵活。
要点:装饰器的基类抽象出职责方法,一个子类对象可以关联下一个子类对象,要调用子类对象职责方法的时候,与之关联的子类对象也要累加这个对象的职责的影响。这个与责任链类似,但是责任链是会打断链条,装饰器不会,而且责任链是有固定顺序的,装饰器没有。
结构图: