您的位置:首页 > 其它

关于设计模式的那些事情

2014-12-09 23:02 169 查看
摘要: 在软件开发领域中,关于如何编写好可维护的程序一直是一个备受争议的话题,进而也提出了很多的编程理论,但是这样的编程理论的理论基础在哪儿,为什么编程这样的方法会比那样的方法要好,为什么同样能完成结果的代码,维护起来会千差万别?今天我们就来扯扯关于如何写好代码的那些个事情!!

在软件开发领域中,关于如何编写好可维护的程序一直是一个备受争议的话题,进而也提出了很多的编程理论,但是这样的编程理论的理论基础在哪儿,为什么编程这样的方法会比那样的方法要好,为什么同样能完成结果的代码,维护起来会千差万别?今天我们就来扯扯关于如何写好代码的那些个事情!!

关于编程,我们可以理解成为人与计算机交流的一直途径,就像我们平时使用语言和人交流一样,把我们的意图告诉对方,那么与计算机交流和与人交流的时候有哪些区别,我认为唯一不同的是,我们编程,面对的对象是计算机,而我们聊天交流的时候,我们面对的是能够理解我们语言的人类,那么在我们与计算机之间交流的时候 我们需要注意那些的细节,然后我们应该要注意那些坑。

其实,纵观编程的两个趋势,主要有两种主流的派系,一种是面对过程的编程,一种是面对对象的编程,当然,当前还有很多新的编程方式,比如AOP(面对切面的编程,假如我说这个仅仅是面对对象编程的一个分支,会不会有人喷我说,你丫懂个毛线!),面对过程的编程不在我们今天讨论的方位之内,今天我们主要讨论的是面对对象的编程。好吧 进入正题

吐了个槽

在面对对象的编程当中,很多书上都说了要遵循面对对象的几个特性,神马要封装,什么要继承,神马要多态。但是你去翻翻那些个所谓的JAVA入门到精通,什么20天学会JAVA编程等诸如此等我把它列为垃圾书籍的书中讲解的并不详细,甚至有些无良的作者随便一段代码抄录 然后做一些个有的没的注释,让各位读者看完以后,尼玛说了个啥都不知道,还白花花的花费了N多白银,我真心想说,你们正式有业(QU)界(NI)良(MA)心(BI)啊.

指导思想

进入正题,看看面对对象编程中这几个概念到底都有什么内涵

面对对象编程第一步 要封装

话说什么封装,为什么要封装,封装好了有啥效果。

什么是封装?

答:封装就是将你的项目中多次出现相同代码进行抽象与合并的这么一个过程叫做封装。这样说,应该能够明白不少了吧,其实封装仅仅是一个为了描述这个过程的一个名词而已,说白了就是提炼

为什么要封装?

很多人应该遇到过这样的经历,特别是刚刚进入这一行的新人,满怀欣喜的啪啪码好了一对项目模块的代码,正准备commit的时候,PM说,丫的,你写了个啥?满屏的满屏的重复代码,你丫想干啥?接下来的就是PM的口头禅!看我嘴型“你-把-这-些-代-码-封-装-好-了-再-提-交!!”

首次玩JAVA等类似的面对对象语言的骚年们肯定很不解,说,尼玛我功能完成了就行了,为什么还要封装来封装去,不嫌麻烦么?其实N多的PM也不会告诉你,等你把代码都提炼出来,你可以为你以后减少很多不必要的加班。那好了 其实封装的真正意义就在于,修改和维护的时候会变得更加简单,试想一下,你的某段代码,在整个项目中出现了100次(没有提炼的那种),那么有一天,要对这段代码进行修改,骚年,你就等着加班到死吧,假如你将这100多次同样的代码放在一个提炼的方法里,那么,你只需要改一个位置,其他的地方就更着变了,这样岂不是更加舒服?俗话说 不作就不会死,好好想想后果吧,那些还不明白为什么要封装代码的懵懂少年们,觉醒吧!!

那么封装的原则是什么?什么样的封装算是比较舒服的了?

其实这个没有定数,我只想告诉你基本一些个原则,当一段同样的代码在项目中出项了2次以上,我就可能会考虑把他弄到一个方法里面了,我这样做的目的很简单,就是为了能够方便的调用和维护,因为你维护一个小小的方法要比你维护一对散落的代码要容易许多,我把这个种方法叫做“代码方法集中管理”那么代码封装的另外一个原则边界是什么,是不是我什么样的代码都放在一个提炼的方法里面了?答案:不是,封装的边界是在于,一个方法最好是只做一件事情,这样够简单,够单纯,而且这样做的影响范围是最小的。所以封装代码的方式边界就是“以影(SHA)响(SHANG)力(LI)最小为原则边界”

面对对象第二步 要继承

这个是面对对象的第二步,那么为什么要继承??继承有什么样表现形式?

在很多书中都是这样对继承进行描述的,说Person Animal是父类,Student,dog,cat是子类,然后尼玛在Person,Animal类中写一堆有的没的方法函数,然后他用所谓extends 继承,然后告诉大家这个就是继承!不过这样写法是没有错,不过让人看得有点不知所以然就有点不对了!!而且 这样的书中只是说类可以继承,但是没有说继承有哪些不好的,多次深层次继承会导致类的继承关系错综复杂,可读性不好,假如在深层数的继承中,你通常会遇到这样的情况,你往往为了了解一个类到底有多少个方法,你有可能要从超类读到从孙类,假如多来上几个接口,骚年,等死吧。(所以说,你如果遇到这样的代码,基本就是有两个可能,第一就是设计的这个程序员是个菜鸟,什么也不懂就一顿糊弄,还有就是你可能真正遇到对手了,对方是个大牛,不过人家可能不想让你插手他的项目,故意这样写 让你知难而退)

那么继承能够带来什么样的好处了?

最大的好处就是“省代码”这是把双刃剑,真的,在浅层次的继承中,你会体会到高潮般的快感,如果你把这个继承弄到深层数的继承中,你会体会到蛋疼两个字怎么写,菊紧的感受怎么样诸如此类的感觉。

还有一个继承的内涵就是,实现,也就是实现接口的意思,在面对对象的编程中,万般皆对象,你把接口理解成为一个JAVA中的抽象类基本就能够明白 实现也是继承的一个变种。

面对对象第二步 要多态

多态 这个应该不用多少了,是面对对象中最重要的方式,也是最诡异,最神奇,最难以掌握的一个概念。为什么?

就他么一句“父类指向子类”就足矣让很多人望而却步,为什么 不为什么,因为多态很神奇!!

为什么要用多态?

其实多态是多种形态的简写

怎么理解?

假如Person类是一个父类,StudentA,StudentB,StudentC是一些子类,那么父类只向之类以后,父类就和悟空一样有72变了,一下变StudentA,一下变StudentB,一下变StudentC,还分别执行这三个子类里相同的方法,但是输出的结果还不一样!尼玛 我都快崩了,这就是多态,一个让人又爱又恨的超级特性。

多态在实际中怎用

其实在实际的用法中,通过都是“父类指向子类,然后这个父类通常都是抽象类或者方法,里面通常定义一些个抽象的方法,然后让他们的子类去实现,不同的子类对同一个方法进行不同的实现,从而产生不一样的执行效果,这种手法就是多态的典型应用”。你看那些设计模式里面的23种方式,80%都是这么干的!!真的 不信你去找些代码看看!!看我说的有没有道理!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: