为了避免重复造轮子,将一些尚无文本记录的方案,这个方案能从复用性、灵活性、扩充性或其它特性方面获得行业中有经验的人的一致的较为正向的认知,进行系统的、分门别类的总结划分,抽象出来的结果称为模式。
软件模式的总结对新手是友好的。
从以上软件模式的特性发散,硬件模块的集成,比如将一些常用的成熟经验电路(分立元器件组成)集成为一个芯片,可以也理解为硬件设计模式的建立吗?
模式的四个要素:
为了便于理解和交流自定义的词汇表
使用模式的时间点存在的问题(特定的设计问题/使用模式的先决条件)
不特指某种设计或实现的解决方法(一般由特定问题情景下的一般意义元素组成)
在各个维度上对系统的影响程度(便于对模式进行评价和理解)
Smalltalk MVC:
一些对象划为一组可以作为一个对象,原子对象组成组合对象,感觉类似C语言结构体里面包含结构体
分层的好处,层层独立,替换一层时不会对另一层有特别大影响,只要接口对应就基本没问题
层层包含,便于静态动态替换,或多个复杂封装算法的调用(策略模式),便于独立改变系统结构的某个方面
设计的产生需要决定、选择和权衡,有实例更好(不同领域的实例更更好)
(统一的格式或结构描述,便于学习记忆和比较
23个设计模式:
参考:https://baijiahao.baidu.com/s?id=1661505290125455712&wfr=spider&for=pc
对象的创建和、对象的结构、对象行为
关于细节和抽象:https://blog.csdn.net/weixin_43455008/article/details/113727524
应用程序-高级语言-汇编语言
抽象不应该依赖细节,细节应该依赖抽象可以理解为:
函数的功能应该依赖于传过来的形参,而不是独立的完成细节
关于超类(不太懂):https://baike.baidu.com/item/%E8%B6%85%E7%B1%BB/2976941?fr=aladdin
软件设计模式指导怎么合理的将物理世界的属性进行分类分层合理划分,通过对数据各种的整合、过滤筛选、腾转挪移,方便人的查看、使用、分享、编辑等等一切复杂的处理(比如人在电脑可能敲击一下按键,都导致了运行软件的一系列动作,而这动作中的部分代码可能就需要依据设计模式中提到的方法进行执行);而硬件职能更像是采集物理属性以及执行某条数据所代表的动作。
C语言程序运行到各平台:设计结构阶段适配器和桥接;运行过程阶段用解释器
桥接模式【Bridge】
适配器模式【Adapter】
解释器模式【Interpreter】
高级语言对接口编程,而不对实现编程,C语言属于对实现编程
对接口编程的两个好处:客户不需指定对象有什么类型,只要知道有他要的接口就行;客户不需指定怎么实现的,只需要知道定义接口的抽象类
设计时的来源是真实世界的分析模型,但是结果不一定是,设计中的抽象(部分模式)就可以用来表征这些不存在的对象
设计模式可以帮助设计者确定不明显的抽象和描述这些抽象的对象
关于子类型和超类型:当一个类型的接口包含另一个类型的接口时,就说它是另一个类型的子类型,而另一个类型称为它的超类型,子类型继承超类型的接口
对象的实现由类决定(内部数据、表示、对象完成的操作)
实例化类指的是给对象内部数据分配存储空间
抽象类(为它的子类定义公共接口)和混入类(为其它类提供可选择的接口或功能)不能实例化
可复用是面向对象编程的一个很重要的基础,文中反复提到的各种继承或者来回的抽象基本都是在围绕可复用这一特性,怎么把一段程序设计的随时随地高效复用,高内聚低耦合,稳定可靠易读性维护性强且不依赖底层很考验一个程序员的基本功底,除了不断吸收好的设计方法借鉴前人经验,也和日常编程习惯有关
关于对象、接口、类和继承:书中说理解起来不难,感觉对嵌入式开发人员来说要深入理解还是比较难的,可以参考https://segmentfault.com/a/1190000022539062来增加理解,有具体的代码
白箱复用:生成子类复用,父类内部细节对子类可见
黑箱复用:感觉像把多个有接口的函数封装到一个函数里面,有的函数是引用第三方不开源程序,组装组合的对象内部细节不可见
类继承和组合:前者静态编译,运行中不能改变功能,而且通过子类可见到父类细节,“破坏了封装性”,子类也会随着父类改变,但是比较灵活,所以程序员要在灵活性和复用性间做一个取舍;后者产生的结果更好一些,只需要仔细定义接口及确认约定,因为对象的实现就是基于接口的,所以用起来彼此没有太多依赖,感觉组合是平行调用,继承是上下那种调用
转载:https://blog.csdn.net/Fei_Yang_YF/article/details/117049428