设计模式<框架<架构<平台,从复用角度讲,设计模式是代码级复用、框架是模块级复用、架构是系统级复用、平台是企业应用级复用。
java
一、设计模式算法
为何要先说设计模式?由于设计模式在这些概念中是最基本的,并且也比较简单。那么什么是设计模式呢?说的直白点,设计模式就是告诉你针对特定问题如何组织类、对象和接口之间的关系,是前人总结的经验。好比我要在代码中实现一个全局惟一的配置类,那么就使用Singleton模式。设计模式在实际编码工做和设计框架时会被使用到,而更高层的架构和平台则不会太关注它。数据库
二、框架编程
作WEB开发接触到最多的框架可数ORM框架,ORM框架只是全部数据关系映射框架的统称,具体的如NHibernate、ActiveRecord等,框架是为了解决特定问题而存在的,其它诸如模板框架、缓存框架,框架不能直接使用,须要二次开发。windows
三、架构后端
从大的层面来讲,好比针对公司业务的B2C网站系统架构,里面可能会用到多种解决各方面问题的框架,关注的是技术整合、扩展、可维护性。换个角度,在框架中也会涉及到架构问题,好比开发NHibernate框架,也须要考虑如何进行设计。设计模式
四、平台缓存
平台的概念相似框架,但又结合的架构的考虑,它是更高层面上的“框架”,准确说是一种应用。它是针对企业用户,为解决企业业务须要而造成的产品。安全
1、设计模式(Design Patterns)服务器
模式:模式详解—点击打开连接
设计模式(Design pattern)是一套被反复使用、多数人知晓的、通过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石同样。项目中合理的运用设计模式能够完美的解决不少问题,每种模式在如今中都有相应的原理来与之对应,每个模式描述了一个在咱们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被普遍应用的缘由。
设计模式的分类
整体来讲设计模式分为三大类:
建立型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式。用一个图片来总体描述一下:
设计模式的六大原则
一、开闭原则(Open Close Principle)
开闭原则就是说对扩展开放,对修改关闭。在程序须要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。因此一句话归纳就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,咱们须要使用接口和抽象类,后面的具体设计中咱们会提到这点。
二、里氏代换原则(Liskov Substitution Principle)
里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类能够出现的地方,子类必定能够出现。 LSP是继承复用的基石,只有当衍生类能够替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也可以在基类的基础上增长新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,因此里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科
三、依赖倒转原则(Dependence Inversion Principle)
这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。
四、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。仍是一个下降类之间的耦合度的意思,从这儿咱们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。因此上文中屡次出现:下降依赖,下降耦合。
五、迪米特法则(最少知道原则)(Demeter Principle)
为何叫最少知道原则,就是说:一个实体应当尽可能少的与其余实体之间发生相互做用,使得系统功能模块相对独立。
六、合成复用原则(Composite Reuse Principle)
原则是尽可能使用合成/聚合的方式,而不是使用继承。
(1):框架是什么?
java框架:三大框架详解,其发展过程及掌握的Java技术慨括-点击打开连接
简单点说:框架就是能完成必定功能的半成品软件,如今的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,这个结构是目前国内最流行的Java Web应用程序架构了。
就其本质而言,框架是一个软件,并且是一个半成品的软件。所谓半成品,就是还不能彻底实现用户须要的功能,框架只是实现用户须要的功能的一部分,还须要进一步加工,才能成为一个知足用户须要的、完整的软件。所以框架级的软件,它的主要客户是开发人员,而不是最终用户。
有些朋友会想,既然框架只是个半成品,那何须要去学习和使用框架呢?学习成本也不算小,那就是由于框架能完成必定的功能,也就是这“框架已经完成的必定的功能”在吸引着开发人员,让你们投入去学习和使用框架。
(2):框架能干什么?
能完成必定功能,加快应用开发进度
因为框架完成了必定的功能,并且一般是一些基础的、有难度的、通用的功能,这就避免咱们在应用开发的时候彻底从头开始,而是在框架已有的功能之上继续开发,也就是说会复用框架的功能,从而加快应用的开发进度。
给咱们一个精良的程序架构
框架定义了应用的总体结构,包括类和对象的分割,各部分的主要责任,类和对象怎么协做,以及控制流程等等。如今Java界大多数流行的框架,大都出自大师手笔,设计都很精良。基于这样的框架来开发,通常会遵循框架已经规划好的结构来进行开发,从而让咱们开发的应用程序的结构也相对变得精良了。
(3):对框架的理解
基于框架来开发,事情仍是那些事情,只是看谁作的问题
对于应用程序和框架的关系,能够用一个图来简单描述一下,如图1所示:
若是没有框架,那么客户要求的全部功能都由开发人员本身来开发,没问题,一样能够实现用户要求的功能,只是开发人员的工做多点。
若是有了框架,框架自己完成了必定的功能,那么框架已有的功能,开发人员就能够不作了,开发人员只须要完成框架没有的功能,最后一样是完成客户要求的全部功能,可是开发人员的工做就减小了。
也就是说,基于框架来开发,软件要完成的功能并无变化,仍是客户要求的全部功能,也就是“事情仍是那些事情”的意思。可是有了框架事后,框架完成了一部分功能,而后开发人员再完成一部分功能,最后由框架和开发人员合起来完成了整个软件的功能,也就是看这些功能“由谁作”的问题。
(三)架构
软件体系结构一般被称为架构,指能够预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界还没有造成一个统一的意见,而不一样角度的视点也会形成软件体系结构的不一样理解,如下是一些主流的标准观点。
ANSI/IEEE 610.12-1990软件工程标准词汇对于体系结构定义是:“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构以及知道上述内容设计与演化的原理(principle)”。
Mary Shaw和David Garlan认为软件体系结构是软件设计过程当中,超越计算中的算法设计和数据结构设计的一个层次。体系结构问题包括各个方面的组织和全局控制结构,通讯协议、同步,数据存储,给设计元素分配特定功能,设计元素的组织,规模和性能,在各设计方案之间进行选择。Garlan & Shaw模型[1]的基本思想是:软件体系结构={构件(component),链接件(connector),约束(constrain)}.其中构件能够是一组代码,如程序的模块;也能够是一个独立的程序,如数据库服务器。链接件能够是过程调用、管道、远程过程调用(RPC)等,用于表示构件之间的相互做用。约束通常为对象链接时的规则,或指明构件链接的形式和条件,例如,上层构件可要求下层构件的服务,反之不行;两对象不得递规地发送消息;代码复制迁移的一致性约束;什么条件下此种链接无效等。
关于架构的定义还有不少其余观点,好比Bass定义、Booch & Rumbaugh &Jacobson定义、Perry & Wolf模型[7]、Boehm模型等等,虽然各类定义关键架构的角度不一样,研究对象也略有侧重,但其核心的内容都是软件系统的结构,其中以Garlan & Shaw模型为表明,强调了体系结构的基本要素是构件、链接件及其约束(或者链接语义),这些定义大部分是从构造的角度来甚至软件体系结构,而IEEE的定义不只强调了系统的基本组成,同时强调了体系结构的环境即和外界的交互。
(四)平台
java是一个能够在不一样操做系统(例如windows,unix等)上运行的编程语言,java平台是指运行在各类终端(如pc、服务器、移动设备、嵌入式设备)的系统软件。PC机上的java程序是用javaSE开发出来的,服务器端的java程序是用javaEE开发出来的,移动设备的java程序是用javaME开发出来的。
移动平台:
J2ME(Java 2 Micro Edition)是Java 2的一个组成部分,它与J2SE、J2EE并称。根据Sun的定义:J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话和可视电话、数字机顶盒、汽车导航系统等等。J2ME技术在1999年的JavaOne Developer Conference大会上正式推出,它将Java语言的与平台无关的特性移植到小型电子设备上,容许移动无线设备之间共享应用程序。
桌面应用平台:
企业级平台:
J2EE Java2平台企业版(Java 2 Platform,Enterprise Edition),J2EE是一套全然不一样于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提升可移植性、安全与再用价值。J2EE核心是一组技术规范与指南,其中所包含的各种组件、服务架构及技术层次,均有共通的标准及规格,让各类依循J2EE架构的不一样平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间没法兼容,致使企业内部或外部难以互通的窘境。
(五)总
1.框架与架构之间的关系
框架不是构架(即软件体系机构)。体系结构肯定了系统总体结构、层次划分,不一样部分之间的协做等设计考虑。框架比架构更具体。更偏重于技术涉嫌。肯定框架后,软件体系结构也随之肯定,而对于同一软件体系结构(好比Web开发中的MVC),能够经过多种框架来实现。
2.框架与设计模式之间的关系 设计模式和框架在软件设计中是两个不一样的研究领域。设计模式研究的是一个设计问题的解决方法,一个模式可应用于不一样的框架和被不一样的语言所实现;而框架则是一个应用的体系结构,是一种或多种设计模式和代码的混合体虽然它们有所不一样,但却共同致力于令人们的设计能够被重用,在思想上存在着统一性的特色,于是设计模式的思想能够在框架设计中进行应用。 框架和设计模式存在着显著的区别,主要表如今两者提供的内容和致力应用的领域。 1)从应用领域上分,框架给出的是整个应用的体系结构;而设计模式则给出了单一设计问题的解决方案,而且这个方案可在不一样的应用程序或者框架中进行应用。 2)从内容上分,设计模式仅是一个单纯的设计,这个设计可被不一样语言以不用方式来实现;而框架则是设计和代码的一个混合体,编程者能够用各类方式对框架进行扩展,进而造成完整的不一样的应用。 3)以第二条为基础,能够得出设计模式比框架更容易移植:框架一旦设计成形,虽然尚未构成完整的一个应用,可是以其为基础进行应用的开发显然要受制于框架的实现环境;而设计模式是与语言无关的,因此能够在更普遍的异构环境中进行应用。 总之,框架是软件,而设计模式是软件的知识体,提高框架的设计水平。