• GoLang设计模式整合版

    过去的一段时间里整理了下GoLang设计模式相关的一些内容。主要是是翻译的《All Design Patterns in Go》这个系列。因为文中有一些图片,且翻译的质量也有些不是很好,所以暂时放在博客园上,在这里仅是列个目录出来。考虑着做一些修整后再将完善一些的版本放到这里。 其实我本来不太喜欢拿设计模式说事儿的(主要是面试的一些不好经历),也有过轻模式重原则需求为中心的观点。直到去年(2022年)开始使用GoLang做一些生产上的项目,面对一门新的且极具个性的语言,一时不知道该如何着手组织代码,就顺手在搜索引擎上敲出了“Go语言 设计模式”这样的搜索条目。当意识到在做什么的时候不禁开始苦笑——属于是自己打自己脸了。 从这里开始,我觉得有必要修正下对设计模式的看法了:设计模式是一项入门阶段的基本功——毕竟是经过许多年的实践提炼出来的东西,可靠性上还是有些保证的。但是拘泥于设计模式肯定也是不可取的,在入门阶段过去后就得有点儿自己的想法了。这个过程有点儿类似倚天中张无忌学太极剑,也好像令狐冲学独孤九剑,最开始还有类似“破刀式”“破枪式”这样的固定招法,但只到领悟了“无招胜有招”才算是登堂入室。 啊啊,废话太多了。目录在下面,先凑合看一下: 01. GoLang 设计模式 – 建造者模式 02. GoLang 设计模式 – 工厂模式 03. GoLang 设计模式 – 抽象工厂模式 04. GoLang 设计模式 – 单例模式 05. GoLang 设计模式 – 原型模式 06. GoLang 设计模式 – 对象池模式 07. GoLang 设计模式 – 责任链模式 08. GoLang 设计模式 – 命令模式 09. GoLang 设计模式 – 迭代器模式 10. GoLang 设计模式 – 中介者模式 11. GoLang 设计模式 – 备忘录模式 12. GoLang 设计模式 – 空对象模式 13. GoLang 设计模式 – 观察者模式 14. GoLang 设计模式 – 状态模式 15. GoLang 设计模式 – 策略模式 16. GoLang 设计模式 – 模板方法模式 17. GoLang 设计模式 – 访客模式 18. GoLang 设计模式 – 适配器模式 19. GoLang 设计模式 – 桥接模式 20. GoLang 设计模式 – 组合模式 21. GoLang 设计模式 – 装饰模式 22. GoLang 设计模式 – 门面模式 23.

    [阅读更多...]
  • 设计模式讨论可以休矣

    多少有些标题党了。首先声明一下,就我个人来说,我对设计模式没有丝毫反感。我反感的是空泛地没有标的地讨论设计模式,或者说言必谈设计模式。 起因是和同事的一次讨论。讨论的过程不便多说,只说下我的观点:只为学习设计模式而学习设计模式是没有意义的,这样无助于写出好的代码,反而容易写出晦涩的代码。那什么是好的代码呢?在我看来,好的代码起码得有三好:好用、好看、好维护。 好用,指的是写出的代码必须得能满足需求,不然再好的代码都是无意义的代码。 好看,是说代码最少得看起来顺眼,需要遵循普遍约定的格式,类和方法需要有必要的文档(是的我是一名光荣的java程序员),复杂的逻辑处需要有注释。这一点可以参考一些大公司的编码规范,比如Google编码规范或阿里巴巴编码规范(这个真的是良心之作,有详细的pdf文档,还有eclipse和idea插件)。 好维护,这个说起来很容易就话长了。说下我的看法吧:以一个普通的合格的实习生为例,这个实习生理解并做到可以修改你的代码所用的时间,这个时间需要和代码实现的需求的复杂度成正比。注意,这里说和时间成正比的不是代码的复杂度,而是业务需求的复杂度。也许只是写一个“Hello World!”你就用到了十三种设计模式,你的代码精巧无比,但是没有毛用,这个程序本来最多只需要4行代码一分钟的时间就能完成,理解它本应该也不超过一秒钟。当然,能把简单的事情搞复杂也是人才,自然也有他们的用武之地。 我这里说的“三好”代码和设计模式没有必然的关系。有人也许会问:代码不按设计模式来写那按什么来写呢? 我的答案很简单:按需求来写啊。不过在实现需求以后还得多想想你的代码是不是好理解好维护,有冗余的地方就删掉,有复杂的地方就尝试进行简化,简化不了就写上注释,总之尽量把事情搞得简单些,越简单才越见功夫。没看见么,小李飞刀也就那么简简单单的一刀。这样写出代码也许没有遵循任何一种现成的设计模式,但是绝对是最符合需求的模式。 当然,在一开始我就提过了,我并不反感或反对设计模式。我反感的是空谈设计模式,或者将设计模式作为金科玉律。设计模式当前有用,毕竟是前辈们作出的总结,学习一下还是很有必要的。观千剑而后识器,胸中有锦绣才能做出文章。但是将之作为规范就没有必要了。 我见识过一个方法有几百上千行的代码,也见识过因为开发者野心太大而将一个简单需求搞得复杂无比的代码,也见识过为了使用一些新的特性或功能而将整体结构搞得一团糟的代码…林林总总的,大体上都是为了赶上deadline或满足开发者一时的快意而写出的糟糕的代码。对于这些,我只是希望能够在需求没有那么紧张的时候抽时间做些优化,或者在写代码的时候想想以后接收接手你的代码的人是不是会很窝心。 不写了不写了。话早就说尽了,现在已经有些唠叨了。就这样吧。

    [阅读更多...]