设计模式




对修改关闭,对稳定的开发。将变化的封装在稳定的里面提供接口给外部子类实现。


传入对象又返回对象,达到链式调用。
调用时:obj->productname(“xxx”).companyname(“XXX”).part1(“XXX”).part2(“XXX”).part3(“xxx”).part4(“xxx”).bulid(); 而且是有先后顺序的,最后一个函数对赋值后的对象整体build。



就是在类实现一个接口,让接口可以克隆(会重新new一个对象)当前的对象并返回,很方便的复制一个对象。克隆是如果对象有结合/引用的对象要替换结合/引用对象。 如果引用(指针)也拷贝过来,那么后期修改克隆对象里面的引用,原始对象也会一起改变。因为这两个对象的引用指向同一个位置的。解决就是:克隆对象的时候,引用指向的位置也要重新克隆创建一份,再替换克隆的引用到克隆的对象(在大的对象的克隆函数里面实现这些克隆引用的操作)。
直接克隆有容量的变量叫做浅拷贝,拷贝对象里的引用(需要创建引用指向的位置的数据)叫深拷贝。
当对象里面只包含数据就浅拷贝,当对象里面含有引用等可变对象的时候进行深拷贝。
数组需要深拷贝

共享对象在多线程时需要用互斥锁


适配器主要起转换作用,是两个不兼容放入对象也可以互相沟通。
类的视频器模式使用继承的方法、对象的适配器模式使用组合的方法。
组合是引用到让后计算出来,委托一样的 。
继承是不好的,会继承很多没用的方法。

符号开闭原则:对修改关闭,对拓展开放。




抽象僵尸的共性作为父类,普通僵尸和旗手僵尸分别继承父类并实现自己的不同部分。

定义好各种算法,运行时,传什么算法就执行什么算法。而不想之前的一个僵尸继承一个僵尸,代码的阅读性上非常不好,改动代码需要了解很多的父类。

对于开发者,实现一个抽象的接口和接口会接收各种算法,算法也提前实现好。对于使用者,只需拿到抽象接口,然后对接口传入各种算法就可以实现不一样的功能。
定义一个父类抽象接口,具体的实现交给子类实现,子类在实现的时候接收一个动态的传入的参数即算法。
*

抽象方法(C++里面的虚函数)其实就是一个指针。类里面的方法其实是就是一个全局函数,就算没有参数也会接收一个参数this指针。






每一个对象都专注做自己的业务处理,如果成功继续进入下一个链接节点,不成功直接返回结束流程。各个节点没有耦合关系。
经典案列,过滤器,网站登录

- 计算机软件的设计原则



不要将与对象无光的函数直接定义在对象里面,而应该形成一个接口,在对象里面实现接口,而且其他的对象也可以实现这个接口,而不用去继承最开始那个对象。



依赖倒置就是抽象出来,然后运行时赋值,由程序高层实现,而不是底层自己实现。








































