所以啊...咱也十三岁的说...说真的想要长大当漫画家很累的...而且赶稿累到死什么的真不是闹着玩的→ →当漫画家什么的也不是不可以,只要你有信心就行。但如果没学过素描的话问题就大了,人体比例是硬伤啊啊!!阴影啊调子啊什么的同样。。。不得不说咱也是个有梦想的二次元死忠党,也一直想当漫画家。要说咱现在的水平的话...应该差不多可以出个一般程度的短篇了。(主要是没时间没精力还有动作、速度线什么的很麻烦,咱又没有手绘板啥的...只能拿个速写本窝在床上拿铅笔画...)另外呢,如果你要是人体比例和动作(比如说打斗场景,当然如果你画的是少女风漫画的话那我也就不说啥了)不太好的话,你可以去买几本欧美风的漫画教材(教材一定要多买!如果你真是想立志成为漫画家的话就别怕费钱!),因为毕竟二次元并不是只有日漫的,日漫虽然美型,但是人体比例、动作还有肌肉的绘画并没有美国掌握得好。就算是你接受不了肌肉男什么的也要忍着看下去。而且,你现在的水平是自学的对吧?我以前也是自学的。但在十一岁的时候我参加了一个美术班(虽然说以前我也参加过,学了三年半,但都是油画棒水彩静物素描之类的小孩子东西),碰到了一个女老师,那个老师的水平如果去做插画师的话绝对可以出名的....然后那个班是专门教漫画的,是我妈给我报的。但我只学了几个月那个老师就不教了(因为回家生孩子去了咳咳),尽管这样,咱仍然是受益匪浅...我的水平就是从那个时候开始突飞猛进的。但并不要以为“只有名师教画画才能学好”,任何人的起点都是一样的,只不过是心境不同、坚持的时间有长有短而已。我能说,如果我没有碰到那个老师,我一样能够画到现在这个程度,但至于是什么时候...就不知道了。老师在一定程度上是一种催化剂,能够让你少走许多弯路。但如果有一个人能够时时给你建议的话,即使不能面对面的指导,那与老师的效果差不多是一样的。我废话好多。。。
好吧现在这样,我再说点正常的技巧和方法什么的。

一、一定要买漫画教材。
风格啊、你喜欢的类型可以随意挑,我也买过很多本,内容差不多都是一样的。然后如果漫画教材到手后,你就照着上面画吧...按部就班就好。(但如果你可以达到手绘出美型人物毫不费力的程度,那动漫教程对你来说已经没有任何作用了,送人也好保留素材也好,都无所谓了。其实我现在就有种感觉,好像很久以前第一眼看到的如同大神般的画现在回头再看,好像还没我画得好)
其实没学过素描的有好处也有坏处。好处是你的自主能力很强,不用依赖老师的指导,这在以后的学习中是相当有帮助的。坏处是已经养成了一些坏习惯,比如说画人不是先勾勒形体而是先从头部(或身体某部分)开始画等等。这种习惯想改会很费劲,毕竟已经养成了。从脑袋开始画这个习惯我现在好歹才改过来,具体说多了都是泪啊..
所以说一定要按教程上的步骤一步一步来。即使你认为它这么画没有你画的快画得好,你也一定要去遵守,模仿。这是一个漫画家必备的能力...
二、多观察,多阅读,多模仿。
你在看漫画的时候并不要只看情节,还要注意它的画风——比如说眼睛怎么画啊,手怎么画啊,脸尖不尖啊等等。如果你认为好,就去模仿。模仿得不像也罢,你认为不好也罢,只要模仿,一直模仿就行。当然,这并不是让你一个劲地临摹,临摹到分毫不差,而是要取百家之长,最终整合,成为你自己独有的画风。可能有人认为“画风”这种词太过遥远,现在还不要想什么的,都是废话。画风是循序渐进、一点点养成的,当一个人挥笔就能画出一张脸、一个人物的时候,那他的画风早就已经形成了,在他不知不觉的情况下就已经出现了。
还有就是观察,在别的漫画中取长补短,比如这个人的眼睛画得好,深得你心,那就拿出眼睛。这个人脸型很浑然天成,是你喜欢的风格,再取脸。接着就是比例、动作、服饰啊等等等等。
顺便一说,画风取决于你自己,而不是取决于他人。如果你的组合结果你很满意,那就可以保留。而如果有一天你看到了更好的,就请毫不犹豫地替换掉以前的吧。旧的不去新的不来,画风能改,但是要越改越好,越改越完美,而不是墨守成规。
如果你做到了这一步,你形成了画风,或者懂得取长补短各种杂糅的时候,你当个插画家应该没有大问题了,但漫画家还需要一个知识,一个必要的知识。
三、分镜。劳资一生的痛..
分镜是一个漫画的基础,一个漫画的灵魂。你有没有想过,如果没有分镜这些条条框框的限制,你的画,你的人物,你的剧情就会变得一团糟。分镜是画与画之间的空白地带,却有着无比大的学问。它可以表示时间的流逝,场景的转换...总之是个很神奇的东西。
当然,如果你当了漫画家,就会有一整个的创作团队,包括背景师、分镜师、主笔、编剧等等。但现在你还不是,对吧?所以分镜有必要研究一下。才不会告诉你我现在也在研究,但是没研究出个所以然来...
四、背景。
说实话,背景这东西没学过素描的话是不会画得太好的。而你画背景的时候,需要考虑到光的明暗、哪里该留白、那里加阴影等等。由衷的建议:不要把背景当做背景,要把它当成你的人物所在的世界。要用心去画,这样才能把读者带进你的故事中,而不是一片两片调子敷衍了事。当然啦,我的背景也是烂的一塌糊涂,但还是那句话,坚持,只要你有信心,你就要去画。管他学没学过素描呢,我看也差不多...
五、剧情。
这个是最最最最重要的东西。想想啊,你的漫画是要叙述一个故事,而只要是故事,不管它有多短,有多烂,但也是有剧情的不是?但事实上,如果你曾经写过文章写过短篇小说的话,估计就没有太大问题。因为你已经构思过了,你已经有了这方面的经验。但——是!如果你不会写文或者文笔不好的话也没关系,你可以找个写的好的人合作嘛!她写文,你配图。多和睦啊...咳咳
但实际上最好还是自己构思的好。因为毕竟两个人喜好不同思维不同,不可能每个念头都契合。这样容易产生纠纷...闹翻了就不好了。
很多短篇漫画家现在都是全能,自己主笔自己编剧自己分镜自己填背景。有的还自己上色...这我就不说啥了,望洋兴叹啊。
六、勾线。勾边,也可以这么说...
一般线描画勾线都是用碳素笔,但漫画就不同了。因为精细度纸张大小还有纸质都不同嘛..
漫画的话我暂时建议你先别勾线,铅笔打底就好。反正扫描仪扫进去都差不多...而如果你下定决心勾线,那就要做好失败了就整张画全废的准备。漫画有专门的勾线笔,网上应该可以买到,但具体名称我不知道。这种笔比较粗,像水性笔一样,但还不同于水性笔。水性笔有的一覆盖在铅上就开始不出油,有的还漏...那样就惨了。但这种专用笔不同,不漏油不断油还不晕开...我这做广告呢这是?总之来说还是别勾了为好。
但还有另一种方法...就是买个小灯箱或者是弄个盒子,把上面剪开,然后盒子里放个灯泡或者手电筒啥的(你用手机我也不反对,能发光还挺亮的东西就行),最后在盒子上搭块玻璃,然后你把你的画放上去,再拿一张纸质、大小与底稿完全一样的纸盖住底稿,接着在第二张纸上描就行了。这样既可以保住原稿,又可以描出线稿。。。双赢啊。
PS:如果你没有以上条件的话,可以直接把纸按在玻璃上再描...才不告诉你我就是这么干的...前提是得了颈椎病不要来找我!(跑走)
七、上色。这个基本不是我们凡人能够做的范畴了...我活到现在都从来没敢给自己的一张漫画上过色...因为结果基本都是毁了底稿...
上色的工具你可以有选择(比如马克笔、水彩、水油分离等等),但我推荐彩铅。彩铅有专门的教程,这里就不多说了,自己买本书就行。(我尽量给你推荐几本好的)
普及一下,彩铅有两种,一种是水性彩铅,一种是油性彩铅,还有一种不太常用的粉性彩铅。
彩铅最好是用水性的,因为水性彩铅遇水会晕开,与水彩效果一样。容易营造梦幻氛围...而且可以随意混色,这是油性永远都做不到的。注意:有一种貂毛头的、可以存水的专门用于水性彩铅的笔,这种笔很小巧便携,长度大概七八厘米,可以揣进兜里。看着其貌不扬,但价格不低,一般在20~30块钱左右,不得不说画出来的很细腻,比蘸水的水彩画笔要好得多,但有一个问题就是千万不能沾到一丁点油性彩铅,如果沾到了这笔就算是废了,因为油性彩铅的颗粒会把输水管堵塞,就不能用了。
油性彩铅颗粒大,颜色鲜艳,是表现童真、活泼或欢快的画面的最好选择。但大师也能画出如同水性一般的梦幻效果....
油性彩铅混色有一种方法,就是拿面巾纸(或者手指肚)去把两种颜色蹭到一起,效果也很不错。
好了。差不多就是这些。。。说实话打了这么多字真是累死我了...不过谁叫我头一回见到这么志同道合年龄又差不多的妹子呢...喂!咱有心找你QQ讨论但是又怕太突兀...所以果然还是留下QQ吧!等等啊!911541491~~加不加都行但反正我是很期待呢。。。这次基本把咱压箱底的技能和理解都摊出来了。但是咱有个问题,你有没有画啊?发出来看看才能制定训练方案啊对不?Σ( ° △ °|||)︴
推荐几本书,大概都是对咱的画技啊、对漫画的理解有大帮助的。
《理解漫画》、《创造漫画》、《重构漫画》(三部曲,是一套的)
? ? ? ? 作者:斯科特·迈克劳德
第一本讲的是如何理解漫画的高度广度和深度,第二本是各种表情的绘画方法以及情景的渲染,还有背景和分镜的重要性。个人认为一、二本比较有用,都是经久不衰的精典,第三部我还没看,因为第三部好像和漫画的市场、版权啊什么的有点关系,争取最近看吧
强烈推荐这套,整本书都是漫画,但讲的正好是漫画的构成。但总之买了百分之百不会后悔,这套可是咱的至宝啊...
? ?
? ?2. ?《美国漫画专业技法》 ?
? ? ? ? 作者:斯坦·李
又是一经典。不知道吧,蜘蛛侠,X战警,绿巨人,钢铁侠,雷神,神奇四侠的漫画版,全都是他画的!!欧美风比较写实,对于日漫二次元党来说可能有点难以接受。但整本最出彩的地方就是他讲的人物打斗动作那一部分,那姿态叫做一个优美!完美!欧美注重素描,说不定你还能在这本书里学到点...
?
? 3.《飞乐鸟的色铅笔手绘世界》 ?
? ? ? ?作者:飞乐鸟 ?
这回是唯美风的..作者是国内一大神。看名字就能知道,讲的是彩铅的运用技法。我只买了一本,是“温馨彩绘篇”,如果有兴趣可以买全套。同样是物超所值...我扒拉扒拉出来的那点彩铅知识大部分就是在这里学来的,绝对有好处。
?
? 4.《漫画技法完全自学教程:美少女造型专题》 ?
? ? ? 作者:飞乐鸟
又是飞乐鸟大神!!把动漫作品中最受欢迎的17种美少女归类分章节,把这个学透了估计你人体比例啊、画嫩妹子啥的都不用愁了。其实咱想买美少年篇的...好像也有,咱在新华书店看到了...
?
? 5.《超级漫画素描技法:漫画分镜篇》
? ? ?作者:C·C动漫社
“超级漫画素描技法”是一大套书,你要全买的话估计要上千...所以说挑几本就好了。但还是很不错的,很多知名画师都有参与编著。“漫画分镜篇”,顾名思义就是教你怎么画分镜,分镜这种东西没人教是真的画不好的OTZ。。。我现在就是看了书还是没怎么明白。。。但有用是没错,我很少看到分镜居然还有专门的书籍,居然还成体系了,所以说还是不能少。
?
? ?6.《超级漫画素描技法:古典人物篇》
? ?作者:C·C动漫社
不用说了吧。这本就是教你如何画美美的骚年和骚铝~不只是中国的,还有韩国日本希腊法国英国埃及...等等等。所谓东西结合,完美诠释。萌古风的错过了可谓可惜...
?
? ?7.《动漫秀场》系列
? ?动漫秀场跟超级漫画素描技法是差不多的,但貌似没有后者好。可以试着买几本看,我从图书馆借了一本灵异鬼怪向的,只能说有那么点帮助吧,但没有超级漫画素描技法详细,也没人家美型,总之就是这个程度。
说真的。。。除了这些,好像...帮助太大的估计就没有了。如果还想买的话就上当当搜动漫技法吧,会有一大堆,够你买的。。。如果没有财力的话就去图书馆借吧,图书馆也是很好的地方啊,我有好几本就是借的,但遗憾的是还要还,唉...
最后来个终极暗示:说实话你买的那么多书都是把漫画拆得七零八碎的然后再来给你。实在不行买成品单行本啊!!银魂啊黑执事啊什么的不是现成的么!!!但从某种角度上来说只有单行本还是不行,有些东西确实还需要解释,所以就有了教程的出现。两种缺一不可!买几本看看效果还是好的,然后拿着本子自己梦想一下将来的辉煌...给自己打打气吧。
?
? 总之还是一句话。只要你相信,你努力,你坚持,就总有一天会成功。我知道这句话很老套,但却是真理。每个人都有梦想,但重要的是你会不会去为此而努力。你坚持下来了,你就是赢家。其实漫画,代表的并不是端坐在桌前、拿起精致的钢笔,然后抚平白纸好像绣花一样画画的人。只要你想,在哪里不能画画?只要你心中有它,那里不是你的画板?白纸,铅笔,并不是漫画的界限。所谓三天不画便手生。那又何必等到第三天?
? 希望你能达成自己的梦想。岁数并不是漫画的标杆,也不是衡量一个人潜能、画技的天平,你完全不用为此而担心。
? 其实咱很想跟你做朋友...十三岁还对漫画这么有热情的妹子不多了啊QUQ.....远目
总之我想说的就是这些!排版打字累出翔啊!如果你以后还有问题咱可以帮你解答的.....
实在不行你QQ号给我吧!咱俩交流一下啥的...
1_代码重构漫画.jpeg
项目在不断演进过程中,代码不停地在堆砌。如果没有人为代码的质量负责,代码总是会往越来越混乱的方向演进。当混乱到一定程度之后,量变引起质变,项目的维护成本已经高过重新开发一套新代码的成本,想要再去重构,已经没有人能做到了。
造成这样的原因往往有以下几点:
对于此类问题,业界已有有很好的解决思路:通过持续不断的重构将代码中的“坏味道”清除掉。
重构一书的作者Martin Fowler对重构的定义:
根据重构的规模可以大致分为大型重构和小型重构:
大型重构 :对顶层代码设计的重构,包括:系统、模块、代码结构、类与类之间的关系等的重构,重构的手段有:分层、模块化、解耦、抽象可复用组件等等。这类重构的工具就是我们学习过的那些设计思想、原则和模式。这类重构涉及的代码改动会比较多,影响面会比较大,所以难度也较大,耗时会比较长,引入bug的风险也会相对比较大。
小型重构 :对代码细节的重构,主要是针对类、函数、变量等代码级别的重构,比如规范命名和注释、消除超大类或函数、提取重复代码等等。小型重构更多的是使用统一的编码规范。这类重构要修改的地方比较集中,比较简单,可操作性较强,耗时会比较短,引入bug的风险相对来说也会比较小。什么时候重构 新功能开发、修bug或者代码review中出现“代码坏味道”,我们就应该及时进行重构。持续在日常开发中进行小重构,能够降低重构和测试的成本。
2_代码常见问题.png
代码重复
方法过长

过大的类
逻辑分散
严重的情结依恋
数据泥团/基本类型偏执
不合理的继承体系
过多的条件判断
过长的参数列
临时变量过多
令人迷惑的暂时字段
纯数据类
不恰当的命名
过多的注释
3_代码质量如何衡量.jpg
代码质量的评价有很强的主观性,描述代码质量的词汇也有很多,比如可读性、可维护性、灵活、优雅、简洁。这些词汇是从不同的维度去评价代码质量的。其中,可维护性、可读性、可扩展性又是提到最多的、最重要的三个评价标准。
要写出高质量代码,我们就需要掌握一些更加细化、更加能落地的编程方法论,这就包含面向对象设计思想、设计原则、设计模式、编码规范、重构技巧等。
4_SOLID原则.png
一个类只负责完成一个职责或者功能,不要存在多于一种导致类变更的原因。
单一职责原则通过避免设计大而全的类,避免将不相关的功能耦合在一起,来提高类的内聚性。同时,类职责单一,类依赖的和被依赖的其他类也会变少,减少了代码的耦合性,以此来实现代码的高内聚、松耦合。但是,如果拆分得过细,实际上会适得其反,反倒会降低内聚性,也会影响代码的可维护性。
添加一个新的功能,应该是通过在已有代码基础上扩展代码(新增模块、类、方法、属性等),而非修改已有代码(修改模块、类、方法、属性等)的方式来完成。
开闭原则并不是说完全杜绝修改,而是以最小的修改代码的代价来完成新功能的开发。
很多设计原则、设计思想、设计模式,都是以提高代码的扩展性为最终目的的。特别是 23 种经典设计模式,大部分都是为了解决代码的扩展性问题而总结出来的,都是以开闭原则为指导原则的。最常用来提高代码扩展性的方法有:多态、依赖注入、基于接口而非实现编程,以及大部分的设计模式(比如,装饰、策略、模板、职责链、状态)。
子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/parent class)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏。
子类可以扩展父类的功能,但不能改变父类原有的功能
调用方不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。接口隔离原则提供了一种判断接口的职责是否单一的标准:通过调用者如何使用接口来间接地判定。如果调用者只使用部分接口或接口的部分功能,那接口的设计就不够职责单一。
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
一个对象应该对其他对象保持最少的了解
尽量使用合成/聚合的方式,而不是使用继承。
单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,告诉我们要对扩展开放,对修改关闭。
image.png
模块结构说明
代码开发要遵守各层的规范,并注意层级之间的依赖关系。
多个方法代码重复、方法中代码过长或者方法中的语句不在一个抽象层级。
方法是代码复用的最小粒度,方法过长不利于复用,可读性低,提炼方法往往是重构工作的第一步。
意图导向编程 :把处理某件事的流程和具体做事的实现方式分开。
将函数放进一个单独对象中,如此一来局部变量就变成了对象内的字段。然后你可以在同一个对象中将这个大型函数分解为多个小型函数。
方法参数比较多时,将参数封装为参数对象
任何有返回值的方法,都不应该有副作用
临时变量仅使用一次或者取值逻辑成本很低的情况下
将复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途
把复杂的条件表达式拆分成多个条件表达式,减少嵌套。嵌套了好几层的if - then-else语句,转换为多个if语句
当出现大量类型检查和判断时,if else(或switch)语句的体积会比较臃肿,这无疑降低了代码的可读性。 另外,if else(或switch)本身就是一个“变化点”,当需要扩展新的类型时,我们不得不追加if else(或switch)语句块,以及相应的逻辑,这无疑降低了程序的可扩展性,也违反了面向对象的开闭原则。
非正常业务状态的处理,使用抛出异常的方式代替返回错误码
某一段代码需要对程序状态做出某种假设,以断言明确表现这种假设。
当使用一个方法返回的对象时,而这个对象可能为空,这个时候需要对这个对象进行操作前,需要进行判空,否则就会报空指针。当这种判断频繁的出现在各处代码之中,就会影响代码的美观程度和可读性,甚至增加Bug的几率。
空引用的问题在Java中无法避免,但可以通过代码编程技巧(引入空对象)来改善这一问题。
根据单一职责原则,一个类应该有明确的责任边界。但在实际工作中,类会不断的扩展。当给某个类添加一项新责任时,你会觉得不值得分离出一个单独的类。于是,随着责任不断增加,这个类包含了大量的数据和函数,逻辑复杂不易理解。
此时你需要考虑将哪些部分分离到一个单独的类中,可以依据高内聚低耦合的原则。如果某些数据和方法总是一起出现,或者某些数据经常同时变化,这就表明它们应该放到一个类中。另一种信号是类的子类化方式:如果你发现子类化只影响类的部分特性,或者类的特性需要以不同方式来子类化,这就意味着你需要分解原来的类。
继承使实现代码重用的有力手段,但这并非总是完成这项工作的最佳工具,使用不当会导致软件变得很脆弱。与方法调用不同的是,继承打破了封装性。子类依赖于其父类中特定功能的实现细节,如果父类的实现随着发行版本的不同而变化,子类可能会遭到破坏,即使他的代码完全没有改变。
举例说明,假设有一个程序使用HashSet,为了调优该程序的性能,需要统计HashSet自从它创建以来添加了多少个元素。为了提供该功能,我们编写一个HashSet的变体。
通过在新的类中增加一个私有域,它引用现有类的一个实例,这种设计被称为组合,因为现有的类变成了新类的一个组件。这样得到的类将会非常稳固,它不依赖现有类的实现细节。即使现有的类添加了新的方法,也不会影响新的类。许多设计模式使用就是这种套路,比如代理模式、装饰者模式
继承与组合如何取舍
Java提供了两种机制,可以用来定义允许多个实现的类型:接口和抽象类。自从Java8为接口增加缺省方法(default method),这两种机制都允许为实例方法提供实现。主要区别在于,为了实现由抽象类定义的类型,类必须称为抽象类的一个子类。因为Java只允许单继承,所以用抽象类作为类型定义受到了限制。
接口相比于抽象类的优势:
接口虽然提供了缺省方法,但接口仍有有以下局限性:
接口缺省方法的设计目的和优势在于:
为了接口的演化
可以减少第三方工具类的创建
可以避免创建基类
由于接口的局限性和设计目的的不同,接口并不能完全替换抽象类。但是通过对接口提供一个抽象的骨架实现类,可以把接口和抽象类的优点结合起来。 接口负责定义类型,或许还提供一些缺省方法,而骨架实现类则负责实现除基本类型接口方法之外,剩下的非基本类型接口方法。扩展骨架实现占了实现接口之外的大部分工作。这就是模板方法(Template Method)设计模式。
Image [5].png
接口Protocol:定义了RPC协议层两个主要的方法,export暴露服务和refer引用服务
抽象类AbstractProtocol:封装了暴露服务之后的Exporter和引用服务之后的Invoker实例,并实现了服务销毁的逻辑
具体实现类XxxProtocol:实现export暴露服务和refer引用服务具体逻辑
由于为了保持Java代码的兼容性,支持和原生态类型转换,并使用擦除机制实现的泛型。但是使用原生态类型就会失去泛型的优势,会受到编译器警告。
每一条警告都表示可能在运行时抛出ClassCastException异常。要尽最大的努力去消除这些警告。如果无法消除但是可以证明引起警告的代码是安全的,就可以在尽可能小的范围中,使用@SuppressWarnings("unchecked")注解来禁止警告,但是要把禁止的原因记录下来。
参数化类型不支持协变的,即对于任何两个不同的类型Type1和Type2而言,List既不是List的子类型,也不是它的超类。为了解决这个问题,提高灵活性,Java提供了一种特殊的参数化类型,称作有限制的通配符类型,即List<? extends E>和List<? super E>。使用原则是producer-extends,consumer-super(PECS)。如果即是生产者,又是消费者,就没有必要使用通配符了。
还有一种特殊的无限制通配符List<?>,表示某种类型但不确定。常用作泛型的引用,不可向其添加除Null以外的任何对象。
嵌套类(nested class)是指定义在另一个类的内部的类。 嵌套类存在的目的只是为了它的外部类提供服务,如果其他的环境也会用到的话,应该成为一个顶层类(top-level class)。 嵌套类有四种:静态成员类(static member class)、非静态成员类(nonstatic member class)、匿名类(anonymous class)和 局部类(local class)。除了第一种之外,其他三种都称为内部类(inner class)。
总而言之,这四种嵌套类都有自己的用途。假设这个嵌套类属于一个方法的内部,如果只需要在一个地方创建实例,并且已经有了一个预置的类型可以说明这个类的特征,就要把它做成匿名类。如果一个嵌套类需要在单个方法之外仍然可见,或者它太长了,不适合放在方法内部,就应该使用成员类。如果成员类的每个实例都需要一个指向其外围实例的引用,就要把成员类做成非静态的,否则就做成静态的。
通过对常见场景的代码逻辑进行抽象封装,形成相应的模板工具类,可以大大减少重复代码,专注于业务逻辑,提高代码质量。
面向对象编程相对于面向过程,多了实例化这一步,而对象的创建必须要指定具体类型。我们常见的做法是“哪里用到,就在哪里创建”,使用实例和创建实例的是同一段代码。这似乎使代码更具有可读性,但是某些情况下造成了不必要的耦合。
对于顶层的(非嵌套的)类和接口,只有两种的访问级别:包级私有的(没有public修饰)和公有的(public修饰)。
对于成员(实例/域、方法、嵌套类和嵌套接口)由四种的访问级别,可访问性如下递增:
正确地使用这些修饰符对于实现信息隐藏是非常关键的,原则就是:尽可能地使每个类和成员不被外界访问(私有或包级私有)。这样好处就是在以后的发行版本中,可以对它进行修改、替换或者删除,而无须担心会影响现有的客户端程序。
不可变类是指其实例不能被修改的类。每个实例中包含的所有信息都必须在创建该实例时提供,并在对象的整个生命周期内固定不变。不可变类好处就是简单易用、线程安全、可自由共享而不容易出错。Java平台类库中包含许多不可变的类,比如String、基本类型包装类、BigDecimal等。
为了使类成为不可变,要遵循下面五条规则:
可变性最小化的一些建议:
TDD的最终目标是整洁可用的代码(clean code that works)。大多数的开发者大部分时间无法得到整洁可用的代码。办法是分而治之。首先解决目标中的“可用”问题,然后再解决“代码的整洁”问题。这与体系结构驱动(architecture-driven)的开发相反。

采用TDD另一个好处就是让我们拥有一套伴随代码产生的详尽的自动化测试集。将来无论出于任何原因(需求、重构、性能改进)需要对代码进行维护时,在这套测试集的驱动下工作,我们代码将会一直是健壮的。
Image [6].png
添加一个测试 -> 运行所有测试并检查测试结果 -> 编写代码以通过测试 -> 运行所有测试且全部通过 -> 重构代码,以消除重复设计,优化设计结构
作者:VectorJin


