看《设计模式》的随笔

为了避免重复造轮子,将一些尚无文本记录的方案,这个方案能从复用性、灵活性、扩充性或其它特性方面获得行业中有经验的人的一致的较为正向的认知,进行系统的、分门别类的总结划分,抽象出来的结果称为模式。

软件模式的总结对新手是友好的。

从以上软件模式的特性发散,硬件模块的集成,比如将一些常用的成熟经验电路(分立元器件组成)集成为一个芯片,可以也理解为硬件设计模式的建立吗?

模式的四个要素:

为了便于理解和交流自定义的词汇表

使用模式的时间点存在的问题(特定的设计问题/使用模式的先决条件)

不特指某种设计或实现的解决方法(一般由特定问题情景下的一般意义元素组成)

在各个维度上对系统的影响程度(便于对模式进行评价和理解)

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://blog.csdn.net/b1480521874/article/details/93538625),相对孤立的类(不过多依赖其它类)更容易扩充,安全些

实例化类指的是给对象内部数据分配存储空间

抽象类(为它的子类定义公共接口)和混入类(为其它类提供可选择的接口或功能)不能实例化

可复用是面向对象编程的一个很重要的基础,文中反复提到的各种继承或者来回的抽象基本都是在围绕可复用这一特性,怎么把一段程序设计的随时随地高效复用,高内聚低耦合,稳定可靠易读性维护性强且不依赖底层很考验一个程序员的基本功底,除了不断吸收好的设计方法借鉴前人经验,也和日常编程习惯有关

 

白箱复用:生成子类复用,父类内部细节对子类可见

黑箱复用:感觉像把多个有接口的函数封装到一个函数里面,有的函数是引用第三方不开源程序,组装组合的对象内部细节不可见

 

关于对象、接口、类和继承:书中说理解起来不难,感觉对嵌入式开发人员来说要深入理解还是比较难的,可以参考https://segmentfault.com/a/1190000022539062来增加理解,有具体的代码

类继承和组合:前者静态编译(类似重定义),运行中不能改变功能,而且通过子类可见到父类细节,“破坏了封装性”,子类也会随着父类改变,但是比较灵活,所以程序员要在灵活性和复用性间做一个取舍;后者产生的结果更好一些,只需要仔细定义接口及确认约定,因为对象的实现就是基于接口的,所以用起来彼此没有太多依赖,感觉组合是平行调用,继承是上下那种调用

组合的特例是委托,委托具有和继承一样的复用能力;不足之处是不易理解,运行低效(组合的特点),什么时候用委托取决于设计者经验(标准模式下比较适用)

参数化类型:功能复用技术,定义一个类型时并不指定该类型所用到的其他所有类型,不能在运行时刻改变(继承的特点)。未经指定的类型在使用时以参数形式提供,int、String、void等等在参数化时不明确类型,传入实参时再明确

采用继承、组合、委托、参数化类型(书中模式未提到)的哪一种方法,取决于设计和实现的约束条件

 

面向对象的一个特点:代码结构(编译时的类确定下来)和运行时刻的结构(由快速变化的通信对象网络组成)差距较大,前静后动;而面向过程编程,差距没那么大,程序编译时的时序就是运行时序

 

上条特点是不是说明面向对象编程出现高并发(变化快且多)的概率和场景比面向过程多?

聚合是包含,相识(关联/引用)仅仅是知道,属于松耦合,是动态的;前者例子是成员变量,后者例子是指针/引用

 

系统程序设计前要考虑它的生命周期要经历的变化(使用模式设计的好处是可以将不可预料的变化归类到它可以处理的特定变化范畴内),而系统运行时刻的结构体现着设计者的思想

 

关于应用程序、工具箱和框架:难度依次递增;应用依赖于框架;写工具箱程序需要写应用软件的主体并且调用想复用的代码;而使用框架时,应复用应用的主体,写主体调用的代码,名字和操作要符合约定,容易复用但不太自由;;

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大饼酱人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值