设计模式及继承和接口

周星驰在《武状元苏乞儿》中的苏灿亦是做上帮主之位,才得到降龙十八掌的秘芨,可惜只练成十七掌,一直未能参透如何施展最后一掌。待至最后危机时刻,苏灿才悟到第十八掌“亢龙有悔”即是前十七掌的融为一体(此招与金庸原著并不相同).结果此掌挥出登时将对手赵无极打得灰飞烟灭、不见尸骸…… 

        设计模式常见有23招(不算上多线程模式中的8招),根据类型又可以分为3类,Creational 模式,Structural 模式,Behavioral 模式。此处大致等同于降龙十八掌的前十七招,。招数好学,稍加时日便可见招拆招。但是当你看到一些框架的设计很精妙的时候,想自己一试身手,却不是那么容易,哪怕心中已经对各种模式的使用也颇为了解,却仍然力不从心。 

        从百度的知道上搜索到一条关于“java接口和继承的一些解释”: 

        1.java类可以一次继承多个接口,用implements 接口1,接口2 
        2.如果是接口继承接口的话也可以用extends,接口是多继承的,java类才是单继承 
        3.接口继承接口可以不实现父接口中的方法,可以声明自己的新方法, 
        4.类实现接口时,一定要实现接口中声明的方法,如果接口中没有定义抽象方法则不需要 
        5.抽象方法只能定义在抽象类中,抽象类实现接口,可以不实现接口中的抽象方法
 

       外行看不懂,内行不用看。但100%正确,任何一本不算太烂的书都会解释的很清楚,语法层面的解释。借助强大的IDE工具想在这些问题上出错都很困难。初学者认真看语法书就能掌握上述知识,对于稍具经验的开发者来说,意义不大。谈一点我的认识: 

       继承- 事物的自然属性和行为。比如:你从您的父亲或爷爷或更老的祖先那里获取的属性和行为。 

       一部分属性和行为被你毫无保留的继承了下来。 

       人,一般科学上被归类在灵长类,和人类一起同属与灵长类的,还有树鼩,狐猴,眼睛猴,猴子及类人猿。解剖学家发现,人类和这些动物在骨骼,肌肉和器官构造上有不少基本相似,因为我们都来自与灵长类。 

       但是除了共性,即便是同属灵长类的我们又有着非常多的不同之处。包括外在内在体貌特征,解决问题的行为和方式,有些被完全继承下来了(一个鼻子,两只眼睛,都用嘴巴吃饭......),有些被有所保留的继承下来(指甲,不在作为捕猎的辅助,用于女孩子打扮,但又保留了挖耳朵,鼻子的本质行为),有些则被完全改变(胚胎在发育一个月的时候有半圆形的腮,发育两个月的时候有发育不完全的尾,但出生以后这些特征消失,小时候一直觉得自己是有尾巴的)。 

       接口- 事物的社会属性和行为。比如:你从一个自然人长大以后,你要工作了,经济不景气,一连学了不少技能(驾驶,烹饪),换了好几份工作(打手,歌星)等等。驾驶,烹饪是一种行为能力,打手,歌星属于身份。 

       这些并不是你与生俱来的。驾驶是因为你想拥有开车这一技能,并实施了学车,驾照考试这样具体方式,因此你获得了驾驶的能力。打手是因为你想成为打手这一身份,为了获取这样一个身份,你必须遵守打手的帮规,并且一一遵守,但是你作恶的身体是来自你的父母亲的,你现在既是一个普通的自然人,又拥有了驾驶技能,私下还是打手身份。 

       再往深入的说,无论你是拥有驾驶技能,还是打手身份。都会被管理,对于你驾驶能力有驾协,交管等部门会监管或关注你,为什么会这样,因为他们知道你是有驾驶能力的人,你也许先会到这些监管部门去登记注册,当然也可以不去,登记有登记的好处,可能会定期给你寄一些免费的杂志,或罚单,换句话说你额外的获取了一些好处,但又被管理了。打手也会被帮派,司法等监管,因为你属于打手这一身份,你可以主动去帮会报到,或被动被别人举报到警察那里。一旦你拥有了某种能力和身份,很大程度上你就不是孤立的。你会在知情或不知情的状况下被外界所操纵,在知情的情况下自己实施某些行为。 

       综上隐含了一些基础语法和容器的概念。也许说的不是很清楚,但最后终结一下,继承:是为了说明你源自什么,你可以说我源自人,但不能又源自鸟,否则就是鸟人(java不允许多重继承,C++可以,我不是那个意思
)。接口是为了说明你是什么,我是一个司机,我是一个医生,我会画画等等(java允许实现多个接口)。接口除了其多态性这一语法特征之外,很重要的一点就是能够表明自己是什么,一旦表明了身份就能够被容器所接管。 

       设计模式是一些招式,设计技巧的归类和终结,这些技巧又源自开发语言本身,我们转了一个圈又回来了。但为什么明白了这些道理还是无法作出优雅的设计,取决与我们对事物的认识是随着经验和时间的改变不断变化的,我们要解决问题的通用性的边界也在不断扩张,心智能力还无法达到比较高的抽象程度。 

你可能感兴趣的:(软件架构)