完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` 本帖最后由 birdinskyd***sy 于 2016-9-24 18:16 编辑 一提到算法,很多小主觉得是数学家的事情,提到设计模式,那更觉得是大大的牛人才能摆得平的东。我也觉得如此。一个高明的算法或模式的发明,确实需要广博的知识、深入的理解,外加一点点灵感。好吧,创造性劳动我们做不来,我们可以在理解和运用方面下下功夫,毕竟山寨一下还是有能力的。 咱们弯弓射箭照直了绷,说《Java23种设计模式》,软件工程的小主们应该不陌生,硬件相关比较强的小主们我不太晓得学不学设计模式。 什么是模式?模型,模版,样式,模子,框架,沙盘。。。。总之,这是为解决一类问题应运而生的东东,你可以在评估了周遭的情况后,确定采用什么套路来解决具体的问题。俗话说万事开头难,有了模式,开头就不难了,并且可以提供做事的方向,暴漏不足,提供弥补不足的思路。不怕慢就怕站,事情一旦运转起来,即使慢,心里也不会堵得慌。简言之,模式就是启动按钮。 《Java23种设计模式》,至少本宫认为是比较早的,后来又出了《C#23种设计模式》,好吧可能还有《D#23种设计模式》、《E#。。。》、《F#。。。》云云。可见,设计模式和语言相关,但又不是强相关。软件设计模式思想的的曾祖高祖太祖一定是从硬件来的,优雅地表达说法,软件设计模式思想一定是根源于硬件的。道理很简单,假如现在没了硬件,皮之不存毛儿将焉附?硬件就是经济基础,软件就是上层建筑,而软件设计模式就是空中花园吧。根据经济学原理,上层建筑会反作用与经济基础,同理推知,软件设计模式可以启发我们搞定硬件设计。好吧,这个命题观之有些牵强,等着我慢慢从一头儿捣到另一头。 我们看看23种设计模式里里边有啥东东,上图而一目了然, 不知道搞web开发的小主们面试时,面试官拿这东难为过你没有,你是振振有词,还是哑口无言呢?不管怎样听本宫说完就知道怎么去忽悠面试官了。 设计模式会坚持一些面向对象编程的原则,本宫就不说了,没几条,小主们蕙质兰心,过目而成诵,主要是这东太抽象了,我们不管它。 一个西瓜,分成三瓣,我们从上往下看,若是从23开始背诵,那就晕了。 设计模式解决三类问题,如何创建,如何存储,如何协同工作。 1.创建型模式 因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有5个具体的创建型模式可供研究:工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、创建者模式(Builder)、原型模式(Prototype)、单例模式(Singleton) 这里我们不关心每种模式具体怎么做,书上比我说得明白细致,我只说怎么分析这5个东,这5个东是我们的第一瓣西瓜。有的小主可能没大接触过面向对象编程,先草草铺垫几句。Object Oriented Programming,OOP,面向对象程序设计;Object-Oriented Analysis,面向对象分析方法;Object-Oriented Design,OOD面向对象设计。我们可能耳闻过很多OO,面向对象,此对象非彼对象,这是一种思想,一切皆对象,封装、继承、多态,这东有很多特质。我们学c的时候,可能对文件操作过,先声明一个指向文件的指针,然后会有一组和文件相关的函数,我们用这些东完成对文件的读写,这个已经接近OO了。再想想socket编程,就更明显了,有专门为socket设计的一堆数据结构和函数。OO,会把和做一件事相关的东,包成一个结构,有数据结构有函数,定义为一个类型,以后就用这个自定义的类型去声明变量,完成和这件事的相关操作。好吧,尽管描述不太科学、不太严谨,就是这个意思,预知更多内涵,请参考相关书籍。上次我们试用了Intel Edison,使用XDK的小主会发现有些东就是这个OO。 还有arduino里边控制舵机的也是OO的用法。现在OO是个啥,表面已经很直观了,然而OO的内涵很深,万万不可小觑了OO。 铺垫完了,我们回头看看这5个东怎么记,从字面上,分四类,前2个是一组都是和工厂相关的模式,后边三个各自为政。工厂就是成批出产品的地方,有时候我们比较懒,希望只提供一个参数,一个字符串类型的名称就把需要的东创建出来,而不是把精力都花费在分配内存的操作上。东西多了我们也同样耗不起。以最小的代价换取最大的胜利始终是我们的原则。根据不同情况,工厂模式派生出了多个门派,普通工厂、工厂方法、多个工厂、静态工厂、抽象工厂,这些都不是无中生有而来,而是适合不同的情况,拿静态工厂方法来说,大多数情况下只要一个工厂就够了,做成静态的花费点空间而节省时间。 那么后几种模式也有其适合的场景,比如证券交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,步调不统一,系统就会完全乱套,这种情况下采用单例模式,只有唯一的指挥官控制交易流程,才能保证可靠性、准确性。由于本文不是研究设计模式本身,不一一描述。 2.结构型模式 这是第二瓣西瓜,设计模式要解决的第二类问题,在解决了创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究:外观模式(Facade)、 适配器模式(Adapter)、代理模式(Proxy)、装饰模式(Decorator)、桥模式(Bridge)、组合模式(Composite)、享元模式(Flyweight) 设计模式是很有章法的,先解决创建的问题,再解决存储的问题。用不同的数据结构模式,解决各种各样的数据存储问题,使得程序高效、可重用、易读、可靠。 嵌入式初期是与C有着不解之缘的,C可以直接去操作一个设备,C是面向过程或面向结构的语言,用函数去一步一步解决问题,而不是用对象的行为去解决问题。初学OO的小主往往都是按照C的套路用堆砌函数的方式解决问题,发挥不出OO的最大威力。随着时间的推移,C库也不断丰富,C也有了很大变化,在设计思路上也借鉴了OO的思想,有的时候,去看c里边的一个大结构体,越看越像类,没有函数指针的结构体就是个实体类,而结构体里的函数指针,就像是类里边的方法入口,类里边的各种定义,看起来就是各种入口地址捏吧到一起了,直接在入口下边写代码。也难怪,所谓的高级语言,都是从基础语言一层一层罗上去的,高级只是说接近人类的自然语言罢了,反而离程序的真相越来越远了。编译的过程,只不过按照事先的语法约定,一层一层往下还原,该替换的替换,该拆的拆,最后还是还原成机器码。 3.行为型模式 这是第三瓣西瓜,在创建和存储结构都解决了之后,就剩下怎么配合着干活了,如果对象的行为或者说方法、函数设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高,设计模式里有11个具体的行为型模式:策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代子模式(Iterator)、职责链模式(Chain of Responsibility)、命令模式(Command)、备忘录模式(Memento)、状态模式(State)、访问者模式(Visitor)、中介模式(Mediator)、解释器模式(Interpreter) 这鬼也是按四类不同场合出手解决问题的,对象关系不同,处理方式也不同。按照一定套路理解总是能轻松一些,比如突然问你,什么东西可以吃?可能一时哑口无言,一坨坨东堵在反射弧里出不来。但是要有了分类,先想到粮食,大米、小米、黑米、紫米、绿豆、白面跟着都出来了,把这些东做熟了,那就是米饭、大饼、疙瘩汤云云;再想到蔬菜,什么芹菜、青椒、茄子、西葫芦、西红柿这也出来了,做熟了那可能就是西芹百合、地三鲜等等;禽蛋肉类,那白条鸡、鸡蛋、排骨等等,还有其他零食啊、奶制品啊、鱼虾蟹啊、酒水饮料、糕点一发而不可收拾。。。。现在可以想到晚饭了,八宝饭、鱼香肉丝、糖醋鲤鱼、老醋花生、冰镇扎啤。。。于是又有交叉配合了。 如此一来,纲举目张,三瓣西瓜,每瓣再分瓜皮瓜子瓜瓤,从上往下看,就好记多了。就算是到了面试官那里,忘了几个模式,但听你这么一分析,显然心里是有框架结构的,显然理解了设计模式是干啥用的。 其实《Java23种设计模式》这本书本身就是一个解决问题的思路,遇到情况,先分析有什么问题要解决,“拆”是第一步,先要目无全牛,牛头、牛身、牛腿、牛尾巴,拆开后各个击破。软件设计无非就是结构和算法,面向对象,就算是面向丈母娘编程,也离不开创建、数据结构和算法这三类事情,再按照大牛们总结的各种原则、各种实际情况,想出一个解决一类问题的套路,于是书就出来了。 设计模式也不只有23种,技术不断发展,新情况不断出现,新模式当然也会不断出现。我们自己也可以不断丰富设计模式,为后来的程序猿们提供方便,说不定小主你就是未来被刻到石头上的牛人。 一本好书或者是一个好的解决方案,往往是针对某个具体的问题诞生的,然而他的思想不局限在解决这个特定的问题里,可以运用到各种各类问题,和原来问题越相似就越适用。 本宫在Edison的试用中,借鉴23种设计模式的成书思路,先看看面临哪些问题,我手头的Edison套件能做什么,哪里的知识还比较陌生去哪里找资料,板子在我的项目中能解决什么问题、不能解决什么问题,需要另行添置什么东。。。。。发现问题之后梳理解决方案,由粗到细,由抽象到具体,解决一个问题时也许正是同时在等待另一个问题的解决,比如项目过程中出现了蓝宙的arduino板子挂了,我可以边等快递边做其他部分。时序,不仅出现在程序里,也出现在生活里,我们在写代码还是代码在写我们?记得初中学过《统筹方法》,华罗庚大爷写得很给力,我们不应该学完了还给语文老师,领会了文章里的精神,就要为我所用。其实这篇文章讲的就是生产生活中的时序怎么安排最合理。分析问题、明确问题、解决问题,这就是每次试用的路数,由《设计模式》而来,也由其他什么东而来,与软件相关的知识最能解决编程遇到的具体问题。编程也是在做事情,那事情应该怎么做才投入最少产出最多,做事情可以借鉴的点可就多了,殊途同归,越抽象,越相似。 我不太懂FPGA这类硬件相关性比较强的东,但是这么多门、存储、逻辑那不仅仅是23个了,没有个宏观规划,而一个个去各自为政地掰扯,简直是难以想象的,项目思路也应该是从上到下的,要解决什么问题,做什么事情,也应该是一类类、一批批地解决,各个部分之间也要有配合,有时序,要统筹,具体的问题有具体的方法,仍然大大可以借鉴设计模式提供的思路思想。 好了,这个命题终于合拢了,软件设计上层建筑终于辅助到了硬件部分开发。些许心得,和大家分享,一起讨论。 |
|
相关推荐
5 个讨论
|
|
硬件打酱油路过!
|
|
|
|
|
|
可以可以,讲的很好!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
imx6ull裸机编程,使用宏定义无法驱动,使用指针就可以驱动
227 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十二章 音频FFT实验
186 浏览 0 评论
飞凌嵌入式ElfBoard EL 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用
1243 浏览 0 评论
stc15f2k60s2利用串口传输字模存储到eeprom并进行点阵显示
1567 浏览 1 评论
1540 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11607 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 05:40 , Processed in 0.837850 second(s), Total 66, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号