关于模式,相信大家均有自己的感性认识。所谓模式无非是特定场景用特定方法,且该场景可重现。正如现实世界中我们读书学习、相互交流、出国考察等,均是为了找寻模式丰富大脑的知识以待后用。不过,我们人类的活动并不仅仅局限在已有的模式中,因为我们更期待用好、用精模式,并且有创造模式的能力。
当然,关于模式自然有官方较为精确的定义,比如建筑领域大师Christopher Alexande说:“每一个模式描述了一个在我们周围不断重复发生的问题,以及给问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必重复劳动。”Alexander所指的这种城市和建筑模式的思想也同样适用于软件领域的设计模式,90年代前期便有很多人从事软件设计模式的工作,由GOF 整理的23中设计模式至今影响深远。
一般而言,一个设计模式有四个基本要素:模式名称、问题、解决方案和效果。其中,模式名称为助记名,能用简短的词语描述模式的问题、解决方案和效果;问题描述了应该在何时使用模式;解决方案是对问题的处理,描述了设计的组成成分,它们之间的相互关系以及各自的职责和相互关系;效果描述了模式应用的效果及使用模式应权衡的问题。
那么,我们将如何快速学习好并掌握好模式呢?
简而言之,理解模式的核心在于重用&开-闭。关于重用,从重用的粒度上看,可归类为代码级、方法级、模板级、模块级以及框架级,它的发展路线上抽象层次越来越高&重用粒度越来越大(设计模式主要是思想上的重用,涉及到上面提及重用粒度中的一种或多种),重用的目的就是为了降低代码冗余(避免开发中存在ctr+c&ctrl+v借用代码的坏味道);关于开-闭,主要是指对系统功能扩充开发&对代码修改关闭,它的目的在于追求功能的扩充尽量不影响原有系统。
接下来的问题是怎样保证重用原则和开-闭原则?
一般而言,重用原则主要是通过良性设计、代码上移&数据下移的思想来保证,而开-闭原则是通过依赖倒转、接口隔离、迪米特原则、里氏替换原则、组合/聚集等思想来保证。
由此可见,我们理解模式的核心在于思考以下几点:
1、模式所属类别;
2、模式四要素:模式名、场景、解决之道、效果;
3、重用原则(代码上移&数据下移);
4、开-闭原则(依赖倒转、接口隔离、迪米特原则、里氏替换原则、组合/聚集)。
这里重点阐述下重用原则的代码上移&数据下移。对于代码上移&数据下移来达到重用的目的这一观点相信大家都可以理解,但这里隐藏了一个问题,那就是实现。java中的这种实现无非借助于(抽象)类和接口,为了达到代码上移&数据下移的目的,我们不得不需要将焦点转移到java抽象类与接口的异同探讨上来。
首先,什么是Java接口?它有哪些特性?它的价值是什么?
JAVA接口:一些方法特征的集合。JAVA接口--在Java语言中存在的结构,有特定的语法和结构;而一般接口--仅仅指一个类所具有的方法的特征集合,是一种逻辑上的抽象;
JAVA接口特性:1、方法默认public;2、属性默认public static final;3、仅是方法签名,无实现;4、一些看上去毫不相干的类,可以因为提供相类似的服务,从而具有相同的接口;(常见的接口有:单方法接口、标识接口、常量接口)
JAVA接口价值:若没有Java接口,便无法做到对可查入性的保证(继承,不支持多继承,无法彻底保证可插入性){面向接口编程}
其次,什么是抽象类?它有哪些特性?
抽象类:代表一个抽象的概念,代表一个类型的实现;
抽象类特性:1、可以有实例变量,1或n个构造子;2、可以同时有抽象方法和具体方法;3、不可以自我实例化;
再次,java接口与抽象类间有何关系?
1、多继承--接口允许多继承,类不允许;2、商业方法--接口仅为特征签名,而类允许存在实现;
最后,对于开发,现代观点是面向接口(抽象)编程,组合优于继承,那么,我们要怎么做呢?其实很简单,这条仅是经验推荐原则(最佳实践),就是多学习、多积累。
比如下面采用接口与抽象混用的方式解决多继承与代码上移:
这样设计的特点是通过抽象层(水果、蔬菜)对接口的实现,达到代码上移&数据下移目的的同时,实现了蔬菜类西红柿变身水果类的多继承。
工作久了,时间紧了,人也懒了,懒得将大脑中汇总的知识形成于文,然随着时间的流逝,有些渐被淡忘,事后想来,多少是种损失,有点遗憾。为了有所弥补,便打算做个备忘于此。
以上是对模式的一些简单阐述,为的就是Pattern栏目做个铺垫,在未来的将着重讲述下GOF 23模式的自我理解,做个简单备份吧
分享到:
相关推荐
关于模式识别的诸多论文:基于LM算法的BP神经网络分类器;基于改进的模糊C均值的BP分类器设计;基于均值漂移和粒子滤波的红外目标跟踪;线性规划支持向量机……
模式分类英文版,很经典的关于模式识别的著作
关于模式识别比较详细的介绍,你可以找到你需要的章节,感觉比较好
这是人工智能的一次作业 但愿对大家有帮助
模式识别生成模式类(python),文件中包含代码与结果
让你快速掌握模式识别的一些基本概念以及算法,包含源码,别与操作
从BP神经元模型和RBF神经元模型几何意义出发,将仿生模式识别理论引入到神经网络分类中,提出了一种基于仿生模式识别的构造型神经网络分类方法,通过构造不同结构神经元结合的神经网络,实现了对不同类样本在高维...
关于模式识别的电子书,很经典的哦,我花了好长时间才收集到得
关于模式识别方面的一些教程,希望对研究这些领域的人事有所帮助.
关于模式识别的相关专业词汇中英文对照,比较全面。
关于模式识别的课件PPT模式,里面有全部的关于模式识别的理论,计算以及需要用到的相关算法。
关于模式识别中聚类分析的详细介绍,对于了解掌握聚类分析有着很好的帮助作用
两本关于模式识别与机器学习的经典英文原版书籍,模式识别必读。
这是一篇关于模式识别与机器学习的高级论文 主要介绍学习方法
第二部分是本书的主体,是关于模式的详细参考手册,每个模式都给出使用方法和实现信息,并配以详细的Java代码或C#代码示例。此外,整本书中还用了大量UML图来进一步阐明有关概念。 本书是为致力于设计和构建企业应用...
关于工厂模式以及简单工厂模式
关于模式识别的自然语言识别............................
这两天看到一篇关于模式识别研究进展的文章,感觉挺好的,和大家共享一下!
关于模式识别与人工智能的课件,希望对大家有帮助
关于模式识别书课间实习的小程序,在协方差相等与不等的情况下