设计模式

设计模式实践

August 10, 2022
设计模式

策略模式 # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 class D { createCode(parentId, followTaskId): string { const parent = this.getTaskById(parentId); let code = ''; if (parent) { const parentCode = parent.taskNbr; if (followTaskId) { code = `${parentCode}${parentCode ? ...

Head-First-设计模式

April 12, 2021
设计模式
读书笔记

第一章 # 开发中的不变真理——CHANGE 设计原则 # 找出应用中可能变化之处,把它们独立出来,不要和哪些不需要变化的代码混在一起。 这是几乎每个设计模式背后的精神所在。所有的模式都提供栏一套方法让“系统中的某部分改变不会影响到其他部分。” 结果如何?代码变化引起的不经意后果变少,系统变得更有弹性。 针对接口编程,而不是针对实现编程。 将鸭子的行为通过接口定义,同一行为的不同表现有不同的实现。这么一来,有了继承的“复用好处”,却没有继承所带来的包袱。 类之间的关系:IS-A, HAS-A, IMPLEMENTS,“有一个”比“是一个”更好。 多用组合,少用继承。 软件开发在完成后花费的时间更多,所以要致力于提高可维护性和扩展性。 定义 # 策略模式定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 继承(is a)--实线三角;实现--虚线三角;有一个--实现箭头; 要点 # 良好的OO设计必须具备可复用、可扩展、可维护三个特性。 继承的缺点 # 代码在多个子类中重复 运行时的行为不容易改变 很难知道所有子类的全部行为 改变会牵一发动全身,造成其他子类不想要的改变。 观察者 # 装饰器 # 工厂模式 # 单例模式 # 命令模式 # 设计原则 # 好莱坞原则 # 模板方法模式,父类属于高层组件,子类属于底层组件。父类是冲向类,其中有若干具体抽象方法,他们是算法的某部分的具体实现,由子类提供。父类还可以定义钩子,用于控制算法流程。 好莱坞原则是说,高层组件会去调用底层组件的方法,不要反向调用。 这样做的好处是避免环形依赖。解耦,其他代码只依赖高级组件,可以减少整个系统的依赖。 框架中比较多。框架提供模板,实现算法的步骤,细节交给使用者实现。