23种软件设计模式完整教程
设计原则
1.开闭原则(Open-Closed Principle,OCP):类、函数、模块----对拓展开放 对修改关闭,面向对象及软件编码中最基本的原则,其思想体现在日常软件系统开发与维护的方方面面。
2.依赖倒置(Dependence Inversion Principle,DIP):构造器注入,setter注入,高层不应该依赖底层模块,抽象不应该依赖具体。面向接口编程,比面向细节实现的系统会更稳定。
3.单一职责原则(Simple Responsibility Pinciple,SRP):一个Class/Interface/Method 只负责一项职责。---实际开发中很多都不符合,但是自己设计时要有这样的思想在里面。
4.接口隔离原则(Interface Segregation Principle, ISP):接口中方法尽量少,接口层面多做拆分,实现类按需实现相应的接口,尽量避免实现类里面有大量空实现体的情况。
5.迪米特法则(Law of Demeter LoD):强调只和朋友交流,不和陌生人说话,最少知道原则--访问控制符,类之间能避免发生关系就尽量避免。
6.里氏替换原则(Liskov Substitution Principle,LSP):子承父类类中出现,约束继承泛滥,1.不能覆盖 2.重载时入参更宽松 3.重写/重载时出参更严格。
7.合成复用原则(Composite/Aggregate Reuse Principle,CARP):继承我们叫做白箱复用--暴露了实现细节给子类、组合/聚合也称之为黑箱复用--实现细节保密。--多用引用少用继承。
温馨提示:
我们【最】希望的是在这些原则的指导下结合【实际的业务】设计出【恰到好处的方案】,不要迂腐的为了原则而原则,那将失去意义。
软件设计模式--学习方法分享
为什么学这项技术?
不同的目的对于即将学习的深度要求不一样、对于学习完之后期望和要求的产出也不一样,以下是常见的两种目的。
一.学完一项技术是为了自己要写一个一样的框架|组件出来。
具体要求:
- 精通技术的实现细节
- 能够在其基础之上进行重构
- 实现出一个性能更优、功能更强大、更易于维护便于定位问题的商用框架
- 框架如何对外推广
学习中主要考虑的几个点:
- 框架架构师的学习范畴
- 框架本身现有实现方式的优点及缺点
- 如果让你来实现这个框架你将如何改进已有缺点
- 改进之后性能上或则功能上将有哪些突破
- 改进之后可能会存在哪些问题
二.还是在开发中遇到某个场景需要使用这一项技术去进行实际的解决。
具体要求:
- 精通其使用特点与使用场景
- 熟悉其使用时的一些已知问题并且在设计上要有规避的方案
- 对原理有一定理解,能够借鉴思想更好
学习中主要考虑的几个点:
- 业务架构师的学习范畴
- 为什么要选择这项技术
- 这项技术使用上公认的一些问题有哪些、如何在自己的设计上最大程度的规避这些问题;公认的优秀的设计又有哪些、如何将这些优秀的方案为自己所用
- 这项技术的引入对我们实际问题解决上的效果怎么样
- 是否还有比这项技术更好的技术能够更加贴切的去解决我们实际遇到的问题
怎么学?
- 哪些途径:书、已有代码、ppt、网站资料、专业视频课程
- 效率:代码>专业视频课程>ppt>网站资料>书
学习成果如何检验?
- 实际问题是否得到了解决
- 解决方案的积累
- 代码的积累---编码更高效