1.设计模式为什么要先讲设计模式呢?因为设计模式是这些概念中最基本的,比较简单。那么什么是设计模式呢?说白了,设计模式就是告诉你针对一个特定的问题,如何组织类、对象和接口之间的关系。是前人总结出来的经验。比如我想在代码中实现一个全局唯一的配置类,那就使用Singleton模式。设计模式是在实际编码和设计框架时使用的,而更高级别的架构和平台并没有太多关注它。2.FrameworksWeb开发中暴露最多的框架可以算作ORM框架。ORM框架只是所有数据关系映射框架的总称,比如NHibernate、ActiveRecord等,框架是为了解决特定的问题而存在的。其他如模板框架,缓存框架,框架不能直接使用,需要二次开发。3、架构从大的角度来看,比如公司业务的B2C网站系统架构,可能会采用多种框架来解决各种问题,注重技术的集成、扩展和可维护性。从另一个角度来看,框架也会涉及到架构问题,比如NHibernate框架的开发,如何设计也是需要考虑的。4、平台平台的概念类似于框架,但是结合架构的考虑,它是一个更高层次的“框架”,准确的说是一个应用。它面向企业用户,是为解决企业业务需求而形成的产品。1.DesignPatterns模式:设计模式是代码设计经验的总结,被反复使用,为大多数人所熟知,并进行了分类和编目。设计模式用于可重用的代码,使代码更容易被他人理解,并保证代码的可靠性。毫无疑问,设计模式对自己、对他人、对系统都是三赢的。设计模式让代码编译真正工程化。设计模式就像建筑的砖石一样,是软件工程的基石。在项目中合理使用设计模式,可以完美解决很多问题。每一种模式都有相应的原则与之对应。每个模式都描述了一个在我们身边反复出现的问题,以及解决问题的核心,这也是它能够被广泛应用的原因。设计模式的分类一般来说,设计模式分为三类:创建型模式,一共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。共有七种结构模式:Adapter模式、Decorator模式、Proxy模式、Appearance模式、Bridge模式、Composition模式、Flyweight模式。行为模式有十一种类型:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。其实有两种:并发模式和线程池模式。用一张图来整体描述一下:设计模式六大原则1.开闭原则(OpenClosePrinciple)开闭原则就是对扩展开放,对修改关闭。当程序需要扩展时,不能修改原有代码,达到热插拔的效果。所以一句话,就是:为了让程序具有可扩展性,便于维护和升级。实现这个效果需要用到接口和抽象类,后面具体设计的时候会提到。2.里氏代换原则(LiskovSubstitutionPrincipleLSP)是面向对象设计的基本原则之一。根据里氏替换原则,基类可以出现的地方,子类就一定会出现。LSP是继承重用的基石。只有派生类能够替代基类,软件单元的功能不受影响时,基类才能真正得到复用,派生类也可以在基类的基础上增加新的行为。.里氏代入原则是对“开闭”原则的补充。实现“开闭”原则的关键步骤是抽象。基类和子类之间的继承关系就是抽象的具体实现,所以里氏代换原则就是对实现抽象的具体步骤的规范。——来自百度百科3.依赖倒置原则(DependenceInversionPrinciple)这是开闭原则的基础。具体内容:真正的接口编程靠的是抽象而不是具体。4.接口隔离原则(InterfaceSegregationPrinciple)这个原则的意思是:使用多个隔离的接口优于使用单个接口。也意味着降低类之间的耦合度。从这里我们可以看出,设计模式其实是一种软件设计思想,从一个大的软件架构出发,为了方便升级和维护。所以上面多次出现:降低依赖,降低耦合。5.得墨忒耳原则(DemeterPrinciple)为什么叫最少知识原则,也就是说:一个实体应该尽可能少的与其他实体进行交互,使系统功能模块相对独立。6.复合复用原则(CompositeReusePrinciple)是尽量使用合成/聚合来代替继承。(二)框架基础知识(一):什么是框架?java框架:详解三大框架,其发展历程及掌握的Java技术。简单来说:框架就是一个能够完成一定功能的半成品软件。目前的结构是的,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层。这种结构是目前国内最流行的JavaWeb应用架构。就其本质而言,框架是一个软件,并且是一个半成品软件。所谓半成品,就是不能完全实现用户所需要的功能。框架只是用户需要的一部分功能,还需要进一步加工才能成为满足用户需求的完整软件。因此,对于框架级的软件,它的主要客户是开发者,而不是最终用户。有的朋友会想,既然框架只是一个半成品,何必费心去学习和使用框架呢?学习成本不小,那是因为框架可以完成某些功能,也就是“框架已经完成的某些功能”在吸引开发者,让大家投入学习和使用框架。(2):框架能做什么?可以完成一定的功能,加快应用开发的进度。由于框架已经完成了一定的功能,而且通常是一些基础的、难点的、通用的功能,这使得我们不能完全从头开始,而是在框架已有的功能之上继续开发,也就是框架的功能框架将被重用,从而加快应用程序的开发进度。给我们一个成熟的程序架构框架,定义了应用程序的整体结构,包括类和对象的划分,各部分的主要职责,类和对象如何协作,控制过程等等。Java界流行的框架大多都是高手写的,设计的非常精巧。基于这样的框架进行开发,一般都是按照框架规划好的结构进行开发,这样我们开发的应用程序的结构就相对细化了。(3):对框架的理解是在框架的基础上发展起来的。东西还是那些东西。这只取决于谁做的。对于应用和框架的关系,可以用一张图来简单描述一下,如图1所示:如果没有框架,那么客户需要的功能全部由开发者自己开发,没问题,用户需要的功能也可以实现,但开发者的工作量更大。如果有框架,而框架本身已经完成了一定的功能,那么开发者就不用再去做框架已有的功能了。工作人员的工作减少了。也就是说,基于框架的发展,软件要完成的功能没有改变,仍然是客户需要的所有功能,即“物还是那些物”。但是有了框架,框架完成部分功能,然后开发人员完成部分功能,最后框架和开发人员一起完成整个软件的功能,也就是取决于“谁”的问题会做”这些功能。(3)架构软件架构通常简称架构,是指一种可以预制和重构的软件框架结构。架构尚处于发展阶段,学术界对其定义尚未形成统一意见,不同的视角也会导致对软件架构的不同理解。以下是一些主流的标准观点。ANSI/IEEE610.12-1990SoftwareEngineeringStandardVocabulary将架构定义为:“架构是一个系统的基本组织结构,包括组件的内容、组件之间的关系、组件与环境的关系,并知道上述内容设计和演化原则”。MaryShaw和DavidGarlan认为,软件架构是软件设计过程中超越计算中的算法设计和数据结构设计的一个层次。架构问题包括所有方面的组织和全局控制结构、通信协议、同步、数据存储、将特定功能分配给设计元素、设计元素的组织、大小和性能,以及设计备选方案之间的选择。Garlan&Shaw模型[1]的基本思想是:软件架构={组件(component),连接器(connector),约束(constrain)}。组件可以是一组代码,如程序模块;它也可以是一个独立的程序,例如数据库服务器。连接器可以是过程调用、管道、远程过程调用(RPC)等,用于表示组件之间的交互。约束一般是对象连接的规则,或者规定组件连接的形式和条件,例如上层组件可以请求下层组件的服务,反之亦然;两个对象不能递归地发送消息;代码副本迁移的一致性约束;什么情况下这样的连接是无效的等等。关于体系结构的定义还有很多其他的观点,如Bass定义、Booch&Rumbaugh&Jacobson定义、Perry&Wolf模型[7]、Boehm模型等。各种关键体系结构的定义虽然角度不同,但研究对象都是也略有侧重。但它的核心内容是软件系统的结构,以Garlan&Shaw模型为代表,强调架构的基本元素是组件、连接器及其约束(或连接语义),这些定义大部分是从构建的从软件架构的角度来看,IEEE的定义不仅强调系统的基本组成,还强调架构的环境,即与外界的交互。(4)平台java是一种可以运行在不同操作系统(如windows、unix等)上的编程语言,java平台是指运行在各种终端(如pc、服务器、移动设备、嵌入式等)上的系统软件设备)。PC端的java程序使用javaSE开发,服务器端的java程序使用javaEE开发,移动端的java程序使用javaME开发。移动平台:J2ME(Java2MicroEdition)是Java2的一个组成部分,与J2SE、J2EE统称。根据Sun的定义:J2ME是一个高度优化的Java运行环境,主要用于消费电子设备,如蜂窝电话和视频电话、数字机顶盒、汽车导航系统等。J2ME技术于1999年在JavaOne开发者大会上正式推出,它将Java语言平台无关的特性移植到小型电子设备上,让应用程序可以在移动无线设备之间共享。桌面应用平台:J2SE商业版,标准版(Java2StandardEdition)定位于客户端,主要用于桌面应用软件的编程。J2SE包含构成Java语言核心的类。企业级平台:J2EEJava2PlatformEnterpriseEdition(Java2Platform,EnterpriseEdition),J2EE是一套完全不同于传统应用开发的技术架构,包括很多组件,主要可以简化和规范应用系统的开发和部署,从而提高可移植性、安全性和重用价值。J2EE的核心是一套技术规范和指南。其中包含的各种组件、服务架构、技术层次都有共同的标准和规范,使得遵循J2EE架构的各种平台之间具有良好的兼容性。解决以往企业后台使用的信息产品互不兼容,导致企业内外难以沟通的困境。(5)总结1.框架与架构的关系框架不是架构(即软件架构)。体系结构决定了系统的整体结构、层次的划分、各部分之间的协作等设计考虑。框架比架构更具体。更强调技术怀疑。框架确定了,软件架构也就确定了,同一个软件架构(比如Web开发中的MVC)可以通过多个框架来实现。2.框架与设计模式的关系设计模式与框架是软件设计中两个不同的研究领域。设计模式研究是解决设计问题的方法。一个模式可以应用在不同的框架上,用不同的语言实现;而框架是一种应用程序架构,它是一种或多种设计模式和代码的混合体。它们虽然不同,但是都致力于使人们的设计可以复用,并且具有思想上统一的特点,所以在框架设计中可以应用设计模式的思想。框架和设计模式之间存在显着差异,主要体现在两者提供的内容和应用领域上。1)从应用领域的角度,框架给出了整个应用的架构;而设计模式给出了针对单个设计问题的解决方案,并且该解决方案可以应用于不同的应用程序或框架。2)从内容上来说,设计模式只是简单的设计,不同的语言可以有不同的实现方式;而框架是设计和代码的混合体,程序员可以使用各种方法来实现框架。扩展,然后形成一个完全不同的应用程序。3)根据第二篇文章可以得出设计模式比框架更容易移植的结论:框架一旦设计好,虽然还没有构成一个完整的应用,但是基于它开发应用显然是受制于框架环境的实施;设计模式与语言无关,因此可以应用于更广泛的异构环境。总之,框架就是软件,设计模式就是软件的知识体,提高了框架的设计水平。
