理解设计模式,以致于不会出现书中所说的对每个模式都是半懂或者混淆不清的状态;
应该做到:1.UML图的理解,可以快速清楚并且弄懂每个模式的原理;
2.把使用的场景理解透彻;3.开源代码中已经有在用的模式
策略模式:
应用场景:
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
装饰模式:
使用场景:
1.当可能存在多个对象,并且每个对象都有差异化的功能时,并且功能的存在性也很多时,为了避免对象接口的大量继承,可以通过装饰类继承对象接口的方式,把功能放到装饰类中,而对象不用管任何的装饰功能,在用户使用的时候显式调用;
2.从为对象添加功能的角度来看,装饰模式比继承来得更灵活。继承是静态的,而且一旦继承是所有子类都有一样的功能。而装饰模式采用把功能分离到每个装饰器当中,然后通过对象组合的方式,在运行时动态的组合功能,每个被装饰的对象,最终有哪些功能,是由运行期动态组合的功能来决定的。
原型模式
使用场景:
1.对于在循环体中,多次实例化的对象,并且需要每次修改到实例对象的;(能否使用到线程中或者进程中)
2.资源和性能优化场景:对象初始化需要消耗非常多的资源,资源包括数据、硬件资源等;
优点:1.用原型实例创建新的对象实例(存在了已经初始化的信息),使用克隆的方式避免了重复的初始化,在克隆函数中调用拷贝构造函数,主要都是内存上面的深拷贝,在性能上得到大大的提高;
缺点:必须先初始化一个对象实例(原型)才能clone;
模板模式
模板模式的使用原理实际上是抽象类的方式,但多了在抽象类中定义一个各个纯虚函数或者虚函数的调用模板函数;
使用场景:
1.在client端调用时,会出现大量重复冗余代码时,考虑把相关复用逻辑实现抽象出来;
迪米特法则:
类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有过关系的类造成波及;